Array con valore variabile

di il
7 risposte

Array con valore variabile

Ciao ragazzi ecco il mio dubbio:
perché non si può inserire una valore variabile in un array? ok il discorso che non posso sapere in anticipo lo spazio necessario e quindi avrei una gestione inefficiente della RAM, ma se ho a esempio tale codice:

int a=0;
cin>>a;
int vettore[a];

é sbagliato? cioè ok il valore è variabile, ma quando vado a dichiarare l'array quel valore lo conosco.
Ringrazio anticipatamente tutti quanti .
Marco

7 Risposte

  • Re: Array con valore variabile

    La frase 'array con valore variabile' NON VUOL DIRE quello che pensi.
    Tu stai chiedendo se sia o meno possibile avere un array di DIMENSINE variabile.
    OVVIAMENTE SI PUO' FARE a partire da array di dimensione prefissata.

    Ad esempio in C++ c'e' std::vector.

    Invece supponi di voler inserire un'UNICO valore all'indice 100000000000.
    la struttura STANDARD degli arraiy prevede di allocare un vettore per contenere TUTTI gli elementi (un miliardo) quando a te ne basta giusto UNO.

    In questo caso bisogna ragionare in termini di 'vettore sparso': e' una str\truttura dati che si comporta quasi come un vettore classico (puoi accedere agli elementi per indice) MA alloca spazio in modo decisamente piu' astuto. Si basa su 'dizionario'/'mappa.

    Che cosa succede se vuoi accedere ad un elemento non esistente?
    In questo specifico caso, puoi ritornare un valore di default, ad esempio 0

    In pratica:
    le strutture dati 'native' sono MOLTO semplici.
    Nulla vieta al programmatore di inventarsi strutture dati infinitamente piu' complicate, a partire da quelle piu' semplici e sfruttando le possibilita' messe a disposizione dal linguaggio di programmazione (classi, interfacce, metodi virtuali, ...)
  • Re: Array con valore variabile

    La dimensione di un array statico deve essere nota a tempo di compilazione e deve essere costituita in ogni caso da una costante.
    In caso contrario quello che andrai a creare sarà un VLA (Variable Length Array), introdotto nel C99, reso opzionale nel C11 e non supportato dallo standard del C++.
  • Re: Array con valore variabile

    Grazie mille per le vostre risposte
    Si ho capito che se inserisco un valore costante del vettore(per tutelarmi lo metterò grande) e ovviamente poi ne utilizzerò molto meno.
    Ma nel caso del codice che ho scritto il vettore sarà proprio uguale ad a? Poi ovviamente non si utilizza in quanto non è supportato nello standard.
    Perdonate la mia poca esperienza con questo linguaggio.
    Marco
  • Re: Array con valore variabile

    Nonloso93 ha scritto:


    Ma nel caso del codice che ho scritto il vettore sarà proprio uguale ad a?
    Vettore è un termine generico che può stare ad indicare cose molto diverse tra loro... nel caso del codice che hai postato andrai a creare un VLA e non un classico array statico.
  • Re: Array con valore variabile

    Come ha detto Nippolo il VLA non è standard in C++, ma solo in C, quindi se anche dovesse funzionare, potrebbe non funzionare su un altro compilatore, motivo per cui è da evitare. Per usare gli array dinamici o usi l'allocazione dinamica con il puntatore e la funzione new, o l tipo vector (che fa la stessa cosa).
  • Re: Array con valore variabile

    Grazie mille ora ho capito
  • Re: Array con valore variabile

    Quando viene dichiarato un array il compilatore alloca una spazio consecutivo di momoria,,,
    int[10]

    praticamente alloca lo spazio per 10 interi
    poi per accedersi fa l operazione matematica.

    Fa parte delle prime strutturi dati dell informatica che poi sono usate per compatibilità andate avanti...
    non mi ricordo nemmeno più quando le ho usate
Devi accedere o registrarti per scrivere nel forum
7 risposte