Les tableaux de dimension statique et dynamique. STL Часть 1




Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template Libraryavant, vous commencez à digérer les types de conteneurs STL, raisonnable pour vous rafraîchir la mémoire sur l'organisation des réseaux de C et C. Parce que les conteneurs STL - ce sont des formes alternatives d'organisation de la collecte de données, exempt des limitations des tableaux.

Les tableaux - une des formes les plus utilisées de ces organisations, et historiquement une des premières formes, apparu dans les langages de programmation (Langues fin 50-s du XX siècle). tableau - Une représentation d'un ensemble consécutive similaire élément. D'une importance fondamentale dans cette définition sont 2 actuellement, qui doivent être remplies pour un tableau nécessairement:

  1. Chaque élément du tableau, vous devez spécifier nombre son emplacement dans une séquence des éléments similaires.

  2. Tous les éléments du tableau doivent nécessairement être odnotypnыmy. Quiconque est familier et compréhensible à la définition la plus simple, par exemple, réseau entier: int tableau[100] . Mais cela ne signifie pas, que les tableaux peuvent être organisés types que de simples intégrés de C ++. Le réseau peut être organisé des objets, les variables de tout type composite (classe, structure) et la complexité. La seule limitation est que, que tous les éléments de la même matrice doivent être du même type. par exemple, peut donc être décrite par un groupe d'étudiants:

Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template Library

En cette circonstance très important - les types d'éléments dans le tableau - nous reviendrons à l'avenir.

Depuis l'époque des premiers langages de programmation (FORTRAN et d'autres.), réseaux impose de fortes restrictions: taille tableau doit être déterminé seulement entier constant, dont la valeur devrait être certainement de au moment de la compilation code. La même restriction conservée dans C, qui est devenu l'ancêtre de C ++. par exemple:

Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template Library

En C ++ (classiquement, sauf pour les normes de ces dernières années!) cette restriction légèrement affaibli avant, que taille la matrice peut être une constante entière, dont la valeur peut calculé de au moment de la compilation code. par exemple, si:

Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template LibraryDans tous ces cas,, Après avoir déterminé la taille du tableau est fixé et nous ne serons pas en mesure de augmenter sa taille (si, par exemple, pendant les calculs seront, que nous n'avons pas assez de cette taille). Pour certains tableaux sont appelés tableaux avec statiquement annoncé (au moment de l'écriture du code) taille.

note: parce que, que tous les éléments de la matrice sont disposés en série (1-règle e de ce qui précède), pour calculer la taille de la matrice (à ses yeux) Il peut être utilisé comme indiqué dans l'exemple de la tour: taille de la matrice est la longueur de l'ensemble du réseau,, divisé par la longueur de l'un de ses éléments (car ils sont tous du même type).

Il peut sembler, que les différents réseaux sans la taille définie, mais avec une liste de valeurs d'initialisation:

Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template Library

Mais il est pas! Juste ici constance sens taille déclarer des tableaux est retiré de la liste des valeurs, et est égale à, dans l'exemple illustré 5.

la seule façon de créer un tableau, Classique C et C ++, taille des éléments N, calculé au moment de la création du réseau (runtime) - Il était une façon d'allouer dynamiquement un tableau. Dans laquelle C et C ++ est, respectivement:

par exemple, si:

Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template Library

Les normes les plus récentes (C99, C ++ 11) l'expansion fait, qui permettent la création de local tableaux avec fonctions Dimensions, calculable à l'entrée de la fonction. Dans ces conditions, le tableau sera alloué sur la fonction de la pile. Ceci est très important, quand nous ne pouvons pas savoir à l'avance la taille des données traitées. A titre d'exemple, regardez le problème de trouver tous les nombres premiers, ne dépassant pas N (tamis d'Eratosthène), où N est définie lorsque le programme démarre.

Le code que nous avons obligé de compiler indiquant la norme du C 2011 année (ou options de compilation, ou recueillis par les propriétés du projet):Les tableaux de dimension statique et dynamique, La STL de контейнеры C , Standard Template Library

Mais même après toutes les extensions, tableau simple, comme une forme d'un ensemble d'objets, Il ne suffit pas souple. Le principal facteur limitant:

  • On ne sortirait pas déterminée par la taille de la matrice (constante ou un calcul pour déterminer le point) augmenter encore cette taille ne peut pas (si vous ne l'avez pas deviné à l'avance la taille requise, ou non prévu un stock suffisant).

  • En C / C ++ règles lors de l'appel des fonctions à la place du tableau en tant que paramètre au lieu d'un tableau est passé à son pointeur commençant (l'adresse du premier élément). ceci permet fortement améliorer l'efficacité de nombreux algorithmes de calcul, mais la perte d'informations sur la taille de la matrice, et il est nécessaire de transmettre un paramètre distinct. par exemple, si nous voulions former un tamis d'Eratosthène ne fonctionne pas Principal(), mais dans une fonction distincte, alors nous aurions à générer comme un défi erastof ( une, n ).

  • De nombreuses opérations de tableau intuitivement simples provoquent des difficultés. par exemple: un élément de tableau 15-élément numéroté 10 il faut insérer entre les éléments 2 et 3. En même temps que). tous éléments 3 sur 9 Vous devez copier une position vers la droite, b). cela doit être fait dans l'ordre décroissant de 9 à 3 et). pour tous les indices de ces opérations doivent surveiller en mode manuel.

Exigences de pratique exigé plus, qui a donné lieu à des conteneurs STL (Standard Template Library).

Bulletin de nouvelles leçons sur la programmation:


Je suis d'accord pour recevoir des messages de purecodecpp.com sur mon e-mail

date
page
Les tableaux de dimension statique et dynamique. STL Часть 1
évaluation
5
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.

2 réflexions sur "Les tableaux de dimension statique et dynamique. STL Часть 1

  1. En C et C ++, il y a une règle: au lieu de les tableaux dans les appels de fonction sont transmises aiguille au début de la matrice (Cette année est arrivé 40-50 il y a pour des raisons d'efficacité, les ordinateurs). Par conséquent, la fonction de transfert dans les informations de réseau à propos de sa taille est perdue.
    Traditionnellement, les tableaux sont transmis à la fonction en tant que 2 paramètre: Indice début du tableau + le nombre de ses éléments. par exemple: void func( à double arr[], taille int ) или void function( double * arr, taille int ).

Laisser un commentaire

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