Newsgroup: it.comp.lang.c++
Titolo: come faccio ad aumentare un array ?

scusate, se io ho un array, come faccio ad aumetare la sua grandezza
di 1 senza perdere i dati da esso contentuto?

Usa std::vector.
#include <vector>
int main() {
  std::vector<int> v(10);
  for ( int i = 0; i < 10; ++i )
    v[i] = i;
  v.push_back(10);
  return 0;
}
Ciao,
Nicola

 di 1 senza perdere i dati da esso contentuto?
A) soluzione "low level" c++
    riallochi un tmp per len + 1
    copi l'array in tmp
    aggiungi l'elemento
    delete array[];
    array = tmp;
B) usa std::vector (consigliato)
 
-- 
"Si vive una volta sola,
 tanto vale godersela."
BW2K+1

 Usa std::vector.
Classica risposta pertinente alla domanda posta, vero ?
Se ti chiedo come funziona il motore di una macchina, mi rispondi "non ti
serve saperlo, basta sapere che puoi usare acceleratore e freno" ?
Penoso, a mio parere.
Ah, comunque niente di personale, anche perché (purtroppo) simili rispostine
le sparano un po' tutti, a quanto pare...
Massimo

le sparano un po' tutti, a quanto pare...
Infatti era la risposta giusta alla domanda originale, la risposta che
probabilmente il 99% dei frequentatori di it.comp.lang.c++ darebbe ad
una domanda simile.
Il Ghenio
WINWORD.EXE - ERRORE DI APPLICAZIONE
l'istruzione a "0x3017ff27"ha fatto riferimento alla
memoria a "0x02a3143c".La memoria non poteva essere 'read'.

 una domanda simile.
Questo non la rende necessariamente la migliore...
A me sembra la piů inappropriata.
Massimo



Un array è di per se un'entità con dimensione statica, il container
più giusto da utilizzare per questo tipo di cose è il vector.
Luc.

grazie per le risposte ! 

 Penoso, a mio parere.
Se tu chiedi "Ho un acceleratore, come faccio a frenare?" che risposta
ti aspetti? Non e' possibile modificare le dimensioni di un array C++,
hai sbagliato a scegliere struttura dati. Siccome non hai dato ulteriori
informazioni circa lo scopo dell'array, ho risposto segnalandoti il
costrutto piu' simile che permettesse di fare quello che volevi e ti ho
mostrato un esempio di come si usa. Pensavo che fosse sufficiente perche
tu potessi capire, ma evidentemente no.
Ciao,
Nicola

Ops, chiedo scusa a Daniele FF. Non mi ero reso conto che il messaggio
precedente non era scritto da lui.
Ciao,
Nicola

 ti serve saperlo, basta sapere che puoi usare acceleratore e freno" ?
Bisogna distinguere. Se uno chidesse:
"devo implementare una classe ArrayDinamico, e per <qualche
 ragione> non posso usare le classi std."
allora ok, ma se si chiede di fare qualcosa di gia' pronto, perche' non 
dirgli che esiste? specie se quel qualcuno ha una deadline da 
rispettare....
-- 
cd /pub
more beer
BW2K+1

le sparano un po' tutti, a quanto pare...
E c'e' anche tanta gente che si ostina a non capire che in C++ si
utilizzano le strutture dati che vengono messe a disposizione dal
compilatore stesso. Inutile reinventare la ruota tutte le volte che
serve.
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

A me sembra la piů inappropriata.
A me la piu' pertinente.


 ragione> non posso usare le classi std."
E bisogna anche vedere se l'impossibilita' di usare le classi std sia
davvero motivata. In realta' sono CLASSI a tutti gli effetti e quindi
non vedo perche' non dovrebbe essere possibile usarle...


 non vedo perche' non dovrebbe essere possibile usarle...
mi vengono in mente almeno due casi:
1 - necessita' di sfrondare tutto il superfluo (sistemi embedded, 
problemi di timing...)
2 - esercizi scolastici

A me sembra la piů inappropriata.
Tu dimentichi che siamo su it.comp.lang.c++ , non su it.comp.lang.c.
Il c++ ha la libreria standard con le sue classi container che
permettono di gestire gli array senza dover usare gli scomodi e
pericolosi( specie per i meno esperti) puntatori, quindi la risposta
di NM é appropriatissima.


2 - esercizi scolastici
Per i quali bisogna studiare.


 Per i quali bisogna studiare.
certo, ma un aiutino si puo' chiedere, no?-)
basta non rispondere subito con tutto il codice, e magari dare delle 
indicazioni sulla strada da percorrere

 serve.
Giustissimo, è uno dei principi base della programmazione, ancor più di
quella OO.
Però resta il fatto che se chiedo come fare una cosa, e mi sento rispondere
"fanne un'altra", mi sembra una risposta poco pertinente... chi ti
garantisce che la persona che ha fatto la domanda sia qualcuno che vuole un
array dinamico e non sa dove trovarlo, invece di essere magari qualcuno che
semplicemente vorrebbe conoscere dei dettagli più tecnici ?
Nel dubbio, io avrei risposto come qualcuno ha fatto: il modo giusto per
riallocare un array a basso livello, e il consiglio di usare se possibile
std::vector, visto che nel 90% dei casi funziona meglio ed è più semplice.
Ripeto, niente di personale, una semplice questione di punti di vista...
Massimo

 wrote in message
3A797A92...@divalsim.it...

Per cancellare un elemento in mezzo alla lista esiste una funzione? Ho
provato pop_back() ma non accetta parametri e toglie sempre l'ultimo
inserimento.

 inserimento.
Se usi std::vector hai un vettore non una lista. Se vuoi una lista usa
std::list.
Per rimuovere un elemento "in mezzo" usa erase, sia nel caso di vector
che nel caso di list.
Consiglione: prima di postare RTFM.
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 Per cancellare un elemento in mezzo alla lista esiste una funzione?
Beh, qui si parlava non di liste ma di vettori.  std::vector, come
altri containers della standard library, ha un metodo erase() che
serve appunto a quello scopo; ma devi usarlo con cautela, perche'
rialloca il vettore e puo' invalidare gli (eventuali) iteratori che ad
esso si riferiscono.
Comunque, std::vector garantisce sostanzialmente[1] tempi O(1) sia per
accesso random che per inserzioni e rimozioni alla FINE della
sequenza; non e' fatto per inserzioni o rimozioni in MEZZO alla
sequenza, operazioni queste che costano parecchio in termini di
prestazioni.
Se hai queste esigenze, considera se puo' esserti piu' adatto un tipo
differente di container: ad esempio std::list, che garantisce accesso
al prossimo elemento e aggiunta e rimozione all'interno della sequenza
tutti O(1) - al prezzo della perdita della facilita' di accesso
random.
[1] "sostanzialmente", ossia salvo il tempo necessario alle eventuali
    operazioni per la riallocazione in caso di estensione della
    memoria riservata (capacity()).
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
The instructions said to use Windows 98 or better - so I installed FreeBSD.


E che vuol dire?

 E che vuol dire?
Facciamo Read That Fine Manual, per amor di eufemismo :)
in questo o lo standard, o uno straccio di help che dovresti aver avuto 
insieme al compilatore.

 wrote in message
news:siYe6.6430$092.1...@twister1.tin.it...


insieme al compilatore.
Un ottimo e molto dettagliato documento sulla libreria standard
fornito dalla stessa RogueWave lo si può trovare anche in compilatori
come il Borland C++ Builder 3.
