Arrays mit statischen und dynamischen Dimension. STL Часть 1

Arrays mit statischen und dynamischen Dimension. STL Часть 1
Bewerten Sie diesen Artikel




Arrays mit statischen und dynamischen Dimension, контейнеры C ++ STL , Standard Template Libraryvor, Sie beginnen, die STL-Container-Typen zu verdauen, vernünftig Ihr Gedächtnis über die Organisation von C und C ++ Arrays zu aktualisieren. Da die STL-Container - das sind einige alternative Formen der Organisation der Datenerhebung, frei von den Beschränkungen des Arrays.

Arrays - eine der am häufigsten verwendeten Formen dieser Organisationen, und historisch eine der ersten Formen, in Programmiersprachen erschienen (Sprachen Ende 50-er Jahren des XX Jahrhunderts). Feld - Eine Darstellung eines Satzes in Folge ähnlich Element. Von grundlegender Bedeutung in dieser Definition sind 2 zur Zeit, das muss für ein Array unbedingt erfüllt werden:

  1. Jedes Element des Arrays müssen Sie angeben, Anzahl seiner Lage in einer Sequenz ähnliche Elemente.

  2. Alle Feldelemente müssen unbedingt odnotypnыmy. Wer vertraut und verständlich auf die einfachste Definition, beispielsweise, Integer-Array: int Feld[100] . Aber das bedeutet nicht,, dass Arrays können nur einfache integrierte Typen von C ++ organisiert werden. Die Anordnung kann Objekte organisiert werden, Variablen beliebigen zusammengesetzten Typ (Klasse, Struktur) und Komplexität. Die einzige Einschränkung ist, dass, dass alle Elemente desselben Arrays müssen vom gleichen Typ sein,. beispielsweise, so kann durch eine Schülergruppe beschrieben werden:

Arrays mit statischen und dynamischen Dimension, контейнеры C ++ STL , Standard Template Library

Mit diesem sehr wichtigen Umstand - die Arten von Elementen im Array - wir werden in der Zukunft zurückkehren.

Seit der Zeit der frühesten Programmiersprachen (FORTRAN und andere.), Arrays auferlegt starke Einschränkungen: Größe Array sollte bestimmt werden, nur ganze Zahl konstante, welcher Wert sein definitiv von bei der Kompilierung Code. Die gleiche Einschränkung erhalten in C, wer wurde der Vorfahr von C ++. beispielsweise:

Arrays mit statischen und dynamischen Dimension, контейнеры C ++ STL , Standard Template Library

In C ++ (klassisch, mit Ausnahme der Standards der letzten Jahre!) diese Einschränkung leicht abgeschwächt vor, dass Größe Das Array kann eine ganze Zahl konstant sein, deren Wert kann berechnet von bei der Kompilierung Code. beispielsweise, so:

Arrays mit statischen und dynamischen Dimension, контейнеры C ++ STL , Standard Template LibraryIn allen diesen Fällen, Nachdem die Größe des Arrays Bestimmung wird festgelegt und werden nicht möglich sein, erhöhen seine Größe (wenn, beispielsweise, während Berechnungen, dass wir nicht genug von dieser Größe). Für bestimmte Arrays werden als Arrays mit statisch angekündigt (zu dem Zeitpunkt den Code des Schreibens) Größe.

Notiz: da, dass alle Elemente der Anordnung in Reihe angeordnet sind (1-e Herrschaft der oben), die Größe des Arrays zu berechnen, (in seinen Augen) Sie kann wie im Beispiel der Trick gezeigt ist, verwendet werden,: Größe der Anordnung ist die Länge der gesamten Anordnung, durch die Länge eines seiner Elemente geteilt (weil sie alle die gleiche Art).

Es mag scheinen,, dass verschiedene Arrays ohne die Größe definiert, aber mit einer Liste der Initialisierungswerte:

Arrays mit statischen und dynamischen Dimension, контейнеры C ++ STL , Standard Template Library

Aber das ist nicht so! Gerade hier Konstanz Bedeutung Größe deklarieren Arrays wird aus der Liste von Werten entfernt, und ist gleich, in dem gezeigten Beispiel 5.

die einzige Weg, um ein Array zu erstellen, Klassische C und C ++, Größe der Elemente N, berechnet zum Zeitpunkt der Erstellung des Arrays (Laufzeit) - Es war ein Weg, um dynamisch ein Array zuweisen. Wobei C und C ++ ist, beziehungsweise:

beispielsweise, so:

Arrays mit statischen und dynamischen Dimension, контейнеры C ++ STL , Standard Template Library

Die neuesten Standards (C99, C ++ 11) gemacht Expansion, dass damit für die Schaffung von lokal Arrays mit Abmessungen Funktionen, berechenbar am Eingang des Funktions. Unter diesen Bedingungen wird die Anordnung auf den Stapel Funktion zugeordnet werden. Dies ist sehr bedeutsam, wenn wir können die Größe der verarbeiteten Daten im Voraus nicht weiß,. Als Beispiel sehen Sie das Problem alle Primzahlen zu finden,, nicht mehr als N (Sieb des Eratosthenes), wobei N gesetzt wird, wenn das Programm startet.

Der Code, den wir haben verpflichtet Angabe der Standard C ++ kompilieren 2011 Jahr (oder Compiler-Optionen, oder von den Projekteigenschaften gesammelt):Arrays mit statischen und dynamischen Dimension, контейнеры C ++ STL , Standard Template Library

Aber auch nach all den Erweiterungen, einfaches Array, als eine Form einer Menge von Objekten,, Es ist nicht flexibel genug. Der wichtigste limitierende Faktor für:

  • Es wäre nicht von der Größe des Arrays bestimmt werden (Konstante oder eine Berechnung auf den Punkt zu bestimmen,) weiter erhöhen kann diese Größe nicht (wenn Sie nicht im Voraus die erforderliche Größe erraten, oder nicht ausreichend Vorrat gelegt).

  • In C / C ++ Regeln, wenn stattdessen die Funktionen des Arrays Aufruf als Parameter anstelle eines Arrays übergeben wird an seinem Anfang Zeiger (die Adresse des ersten Elements). Dies ermöglicht stark die Effizienz vieler Rechenalgorithmen verbessern, aber der Verlust von Informationen über die Größe des Arrays, und es ist notwendig, einen separaten Parameter zu übertragen,. beispielsweise, wenn wir ein Sieb des Eratosthenes zu bilden wollte nicht funktionieren Main(), sondern in einer separaten Funktion, dann würden wir es als eine Herausforderung erzeugen müssen erastof ( ein, n ).

  • Viele intuitiv einfache Array-Operationen verursachen Schwierigkeiten. beispielsweise: ein 15-Element-Array-Element nummeriert 10 muss einfügen zwischen den Elementen 2 und 3. Zur gleichen Zeit wie). alle Elemente 3 auf 9 Sie müssen eine Position nach rechts zu kopieren, b). dies sollte in absteigender Reihenfolge von getan werden 9 zu 3 und). für alle Indizes dieser Vorgänge müssen im manuellen Modus zu überwachen.

Praxisbedarf verlangte mehr, das gab Anlass zu STL-Containern (Standard Template Library).

Newsletter neue Lektionen über die Programmierung:

Öl

Etwa Öl

praktische Erfahrungen über die Softwareentwicklung 40 Jahre. Lehrer Globale Logik internationales Softwareunternehmen. IBM Developer Works Permanent Autor von Publikationen. Wissenschaftliche Herausgeber der Computerliteratur-Verlag "Symbol-Plus", Sankt Petersburg.

2 Gedanken zu "Arrays mit statischen und dynamischen Dimension. STL Часть 1

  1. In C und C ++ ist es eine Regel: statt Arrays in Funktionsaufrufe übertragen Zeiger am Anfang des Arrays (Dies geschah Jahre 40-50 Vor aus Gründen der Effizienz die Computer). Daher wird die Übertragungsfunktion in dem Array Angaben über Größe verloren.
    Traditionell als Arrays werden an die Funktion übergeben 2 Parameter: Index Anfang des Arrays + die Anzahl der Elemente. beispielsweise: Leere func( Doppel arr[], int size ) или Leere Funktion( double * arr, int size ).

Hinterlasse eine Antwort

Platz Code in Tags: <pre class="lang:c ++ dekodieren:true ">DEIN CODE</Vor>