Maison >développement back-end >C++ >Comment utiliser un vecteur basé sur une pile en C ?

Comment utiliser un vecteur basé sur une pile en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-03 09:31:02395parcourir

How to Use a Stack-Based Vector in C  ?

Utilisation d'un vecteur STL avec Stack Storage

Problème :

Trouver un vecteur de type C classe qui utilise le stockage de pile au lieu du tas.

Solution :

stack_container.h de Chromium fournit une classe StackVector qui répond parfaitement aux exigences. Il se comporte presque de la même manière qu'un vecteur ordinaire mais alloue des données sur la pile.

Utilisation :

  • Créer un tampon avec une taille spécifiée :
<code class="cpp">char buffer[4096];</code>
  • Créez l'objet StackVector :
<code class="cpp">stack_vector<match_item> matches(buffer, sizeof(buffer));</code>

Alternativement, le tampon peut être alloué en interne par la classe :

<code class="cpp">stack_vector<match_item, 256> matches;</code>
  • Personnalisez la taille de l'allocateur :
<code class="cpp">typedef std::pair<const char *, const char *> comp_list_item;
static const size_t comp_list_alloc_size = 128;
typedef StackAllocator<comp_list_item, comp_list_alloc_size> comp_list_alloc_type;</code>
  • Instanciez l'allocateur et construisez le vecteur :
<code class="cpp">comp_list_alloc_type::Source match_list_buffer;
comp_list_alloc_type match_list_alloc(&match_list_buffer);
comp_list_type match_list(match_list_alloc);</code>
  • Réservez de la mémoire pour le vecteur :
<code class="cpp">match_list.reserve(comp_list_alloc_size);</code>

Avantages :

  • Remplacement immédiat des vecteurs STL
  • Alloue des données sur la pile, améliorant ainsi efficacité
  • Taille de l'allocateur personnalisable
  • Option de repli automatique vers l'allocation du tas en cas de débordement

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn