Контейнеры STL: liste. partie 4

Контейнеры STL: liste. partie 4
Noter cet article




Liste c ++, ++ feuille avec, La STL de контейнеры C , Standard Template Library, c ++ conteneur, liste bidirectionnelle avec ++Dans la troisième partie des leçons des conteneurs STL, nous avons terminé l'examen des vecteurs, disons, type vecteur<flotte> comme un tableau de nombres réels équivalent. Pour ces « ensembles » a rapidement fait l'opération d'accès à l'élément (lecture-écriture) et l'élément d'insertion-retrait index à la fin vecteur. bien pire (sur l'efficacité) opération est effectuée élément d'insertion d'enlèvement de quelque part au milieu du vecteur, ou le déplacement d'un élément d'une position à une autre.

par exemple, taille du vecteur 15 opération pour déplacer l'élément 10 en position 2 il faudra:

  • Rappelez-vous à une variable intermédiaire du dixième élément;

  • pour tous éléments du 9 au 2ème (dans l'ordre inverse, éventuellement à l'aide de la iterator inversée) copie la position suivante (8 opérations de copie);

  • précédemment enregistré dans un élément variable intermédiaire est copié à la position 2;

en tout, pour cette opération simple, il nous a fallu 10 opérations de copie. Chaque élément du vecteur, comme nous avons discuté plus tôt, Il peut être structure composite dur échec. Et sa place - il est une opération qui prend du temps.

pour “collections”, dans lequel l'addition active prévue, le retrait et les éléments mobiles, bibliothèque STL offre une autre vue du conteneur - liste doublement chaînée, liste. Pour un tel accès aux éléments de conteneur (lecture, record) en série, et pas aussi efficace. Mais l'ajout d'opération, supprimer ou modifier l'ordre des articles est très rapide.

iterator liste iterator est pas un accès direct. Par conséquent, pour lui pasopération d'application +, , +=, -=, et le récipient pasindexation de fonctionnement admissible. Itérateurs pour ce conteneur sont déplacées séquentiellement des opérations de ++ et.

Pour illustrer le travail avec un tel récipient, nous écrivons tout le même problème de trouver tous les nombres premiers, ne dépassant pas N (et la comparaison de la cohérence avec les modes de réalisation précédents):

Ici, la première moitié du code (opérateur << pour une liste) Seule la réalisation décorative de diagnostic et de commodité, et le reste des opérations suivantes est effectuée:

  • créer une liste de liste<int> nombres naturels vont [2…N] – lignes 19 – 22;

  • pour chaque (restant) le nombre de la liste suivante supprimé de multiples éléments à ce – rangée 31;

  • Et si jusque-là, jusqu'à ce que le numéro suivant à tester ne dépasse pas la racine carrée de N – rangée 26 (en nombre de spectacles théorie, divisibilité qui peut être vérifié pas à N-1, et au nombre de, supérieure à la racine carrée de N);

Parmi les caractéristiques du code, et Liste des conteneurs en général, vous devez prêter attention à ce que, que, après le retrait de l'élément, indique la valeur actuelle du iterator, valeur iterator devient incertain. Si nous voulons continuer à itérer, nous devons travailler avec copie iterator (je dans le code illustré).

La mise en œuvre du code, nous pouvons tester, que les résultats exactement semblables aux versions précédentes. Avant de commencer le programme, ne pas oublier de définir les commandes correspondant à l'argument 300, comme nous l'avons fait dans la leçon précédente.
Liste c ++, ++ feuille avec, La STL de контейнеры C , Standard Template Library, c ++ conteneur, liste doublement chaînée

Bulletin de nouvelles leçons sur la programmation:

huile

Sur huile

une expérience pratique sur le développement de logiciels 40 ans. société de logiciels internationale Global Teacher Logic. IBM Developer Works auteur permanent des publications. éditeur scientifique de l'ordinateur littérature maison d'édition "Symbole-Plus", Saint-Pétersbourg.

Laisser un commentaire

Placez le code dans les balises: <pre class="lang:c ++ décodage:true ">VOTRE CODE</pré>