Array di dimensione statica e dinamica. STL Часть 1

Vota questo articolo




Array di dimensione statica e dinamica, контейнеры C ++ STL , Standard Template Libraryprima, si inizia a digerire i tipi di contenitori STL, ragionevole per rinfrescare la memoria circa l'organizzazione degli array C e C ++. Poiché i contenitori STL - queste sono alcune forme alternative di organizzazione della raccolta dei dati, libera dalle limitazioni di matrici.

Array - una delle forme più usate di queste organizzazioni, e storicamente una delle prime forme, apparso in linguaggi di programmazione (Lingue fine degli anni 50-zioni del XX secolo). schieramento - Una rappresentazione di un insieme consecutiva simile elemento. Di fondamentale importanza in questa definizione sono 2 attualmente, che devono essere soddisfatte per una serie necessariamente:

  1. Ogni elemento della matrice è necessario specificare numero la sua posizione in una sequenza di elementi simili.

  2. Tutti gli elementi di un array devono essere necessariamente odnotypnыmy. Chiunque abbia familiarità e comprensibile per la definizione più semplice, per esempio, array di interi: int schieramento[100] . Ma questo non significa, che gli array possono essere organizzati solo semplici tipi built-in di C ++. La matrice può essere organizzato oggetti, le variabili di qualsiasi tipo composito (classe, struttura) e la complessità. L'unica limitazione è che, che tutto elementi dello stesso array devono essere dello stesso tipo. per esempio, così può essere descritto da un gruppo di studenti:

Array di dimensione statica e dinamica, контейнеры C ++ STL , Standard Template Library

Con questa importante circostanza - i tipi di elementi dell'array - ci torneremo in futuro.

Fin dal tempo dei primi linguaggi di programmazione (FORTRAN e altri.), array impone restrizioni forti: dimensione array deve essere determinato solo numero intero costante, quale valore dovrebbe essere decisamente di al momento della compilazione codice. La stessa restrizione conservato in C, che divenne l'antenato del C ++. per esempio:

Array di dimensione statica e dinamica, контейнеры C ++ STL , Standard Template Library

In C ++ (classicamente, eccetto per gli standard degli ultimi anni!) questa restrizione leggermente indebolito prima, che dimensione la matrice può essere una costante intera, il cui valore può calcolato di al momento della compilazione codice. per esempio, così:

Array di dimensione statica e dinamica, контейнеры C ++ STL , Standard Template LibraryIn tutti questi casi,, Dopo la determinazione della dimensione della matrice è fisso e non saremo in grado di aumentare la sua dimensione (se, per esempio, durante i calcoli sarà, che non abbiamo abbastanza di queste dimensioni). Per alcuni gli array sono chiamati array con staticamente annunciato (al momento della scrittura del codice) dimensione.

nota: perché, che tutti gli elementi della matrice sono disposti in serie (1-e regola di cui sopra), per calcolare la dimensione della matrice (davanti a lui) Può essere utilizzato come mostrato nell'esempio del trucco: dimensione della matrice è la lunghezza dell'intero array, diviso per la lunghezza di uno dei suoi elementi (perché sono tutti dello stesso tipo).

Può sembrare, che le diverse matrici, senza la dimensione definita, ma con una lista di valori di inizializzazione:

Array di dimensione statica e dinamica, контейнеры C ++ STL , Standard Template Library

Ma non è così! proprio qui costanza senso dimensione dichiarare array viene rimosso dalla lista dei valori, ed è pari a, nell'esempio illustrato 5.

L'unico modo per creare un array, Classic C e C ++, dimensioni degli elementi N, calcolato al momento della creazione della matrice (runtime) - E 'stato un modo per allocare dinamicamente una matrice. In quali C e C ++ è, rispettivamente:

per esempio, così:

Array di dimensione statica e dinamica, контейнеры C ++ STL , Standard Template Library

Gli standard più recenti (C99, C ++ 11) espansione fatta, che consentono la creazione di locale array con funzioni di dimensioni, calcolabile all'ingresso della funzione. In queste condizioni, l'array sarà assegnato sulla funzione pila. Questo è molto significativo, quando non possiamo conoscere in anticipo la dimensione dei dati trattati. Come esempio, guardare il problema di trovare tutti i numeri primi, non superiore a N (crivello di Eratostene), dove N è impostata all'avvio del programma.

Il codice che abbiamo obbligati a compilare indicando standard C ++ 2011 anno (o opzioni del compilatore, o raccolti dalle proprietà del progetto):Array di dimensione statica e dinamica, контейнеры C ++ STL , Standard Template Library

Ma anche dopo tutte le estensioni, semplice array, come forma di un insieme di oggetti, Non è abbastanza flessibile. Il principale fattore limitante:

  • Non sarebbe determinata dalla dimensione della matrice (costante o un calcolo per determinare il punto) aumentare ulteriormente questa dimensione non può (se non avete indovinato in anticipo la dimensione desiderata, o no di cui scorte sufficienti).

  • In C / C ++ regole quando si chiamano le funzioni al posto della matrice come parametro invece di un array è passato al suo puntatore a cominciare (l'indirizzo del primo elemento). Questo permette fortemente migliorare l'efficienza di molti algoritmi computazionali, ma la perdita di informazioni sulla dimensione della matrice, ed è necessario trasmettere un parametro separata. per esempio, se volessimo formare un crivello di Eratostene non funzionare principale(), ma in una funzione separata, allora dovremmo generare come una sfida erastof ( un, n ).

  • Molte operazioni di array intuitivamente semplici causano difficoltà. per esempio: un elemento di un array di 15 elementi numerati 10 mosto inserire tra gli elementi 2 e 3. Allo stesso tempo, come). tutto elementi 3 su 9 È necessario copiare una posizione verso destra, B). questo dovrebbe essere fatto in ordine decrescente dal 9 a 3 e). per tutti gli indici di queste operazioni è necessario controllare in modo manuale.

Requisiti pratica chiesto di più, che ha dato origine a contenitori STL (Standard TEmplate Library).

Newsletter nuove lezioni sulla programmazione:

olio

Di olio

esperienze pratiche circa lo sviluppo del software 40 anni. Maestro globale Logic società di software internazionale. IBM Developer funziona autore permanente di pubblicazioni. redattore scientifico del computer casa editrice letteratura "Simbolo-Plus", San Pietroburgo.

2 pensieri su "Array di dimensione statica e dinamica. STL Часть 1

  1. In C e C ++, c'è una regola: invece di array in chiamate di funzione vengono trasmessi pointer all'inizio dell'array (Questo è accaduto anni 40-50 fa a causa di motivi di efficienza i computer). Pertanto, la funzione di trasferimento delle informazioni matrice sulla sua dimensione è persa.
    Tradizionalmente array vengono passati alla funzione come 2 parametro: Indice dall'inizio della matrice + il numero dei suoi elementi. per esempio: func vuoto( doppia arr[], int size ) или funzione void( doppia * arr, int size ).

Lascia un Commento

Inserire il codice nei tag: <pre class="lang:C ++ decodifica:true ">IL TUO CODICE</pre>