Newsgroup: it.comp.lang.c++
Titolo: un dubbio sulla classe vector...

Allora, prescindendo dall'utilità alla risoluzione del problema da me chiesto... 
se io voglio creare due oggetti vector di interi staticamente faccio una dichiarazione tipo:
vector<int> ivec;
vector<int> ivec2;
e per accedere agli elementi del vector successivamente posso utilizzare l'operatore di 
subscript come in questo caso:
ivec2.push_back(ivec[2]); //accedendo al 3° elemento...
ora...
se creo invece i due oggetti dinamicamente con:
vector<int> *ivec = new vector<int>;
vector<int> *ivec2 = new vector<int>;
come ci accedo ad uno specificato elemento del vector? facendo come segue mi da errore:
ivec2->push_back(ivec[2]): //....qualche aiuto?

 ivec2->push_back(ivec[2]): file://....qualche aiuto?
devi prima deferenziare il puntatore a vector:
ivec2->push_back((*ivec)[2]);
--
Andrea Spadaccini - Catania (Italy)
Mail: _
lupin85...@libero.it
ICQ#: 91528290
 - It is not important what you believe, only that you believe -

 deferenziare
ehm... deREferenziare.


ehm... deREferenziare.
giusto...  in quanto ho un puntatore, grazie infatti ora va :P

 ivec2->push_back(ivec[2]): //....qualche aiuto?
ivec2->push_back((*ivec2)[2]);
ciao Anto
-- 
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra

</pignolo>
Se gli oggetti sono allocati staticamente allora usano la memoria dello stack, quindi tu che volevi 
dire con la seconda parte del tuo periodo?
se io dichiaro:
vector<int> ivec; 
sia che sia nel namespace globale sia che sia all'interno di una funzione 
non usa sempre la memoria statica dello stack del programma?
al contrario usando l'operatore new() alloco memoria nell'heap .... o sto facendo confusione?

 sto facendo confusione?
stai facendo un po' di confusione...
in C++ abbiamo a disposizione tre tipi di memoria: statica, dinamica e 
automatica.
La memoria statica e` allocata all'inizio del programma e non varia mai: 
in essa troviamo le variabili globali, quelle statiche di classe e 
quelle dichiarate "static" nelle funzioni.
La memoria automatica e` quella "sullo stack": e` allocata 
automaticamente (come dice il nome) dal compilatore quando deve creare 
variabili locali (compresi i parametri) a funzioni o metodi.
La memoria dinamica e` quella allocata con ::operator new o ::operator 
new[], ed e` gestita interamente dal programmatore.
Infine c'e` anche l'heap di memoria usato da malloc e free, anche se e` 
probabile che ::operator new sia implementato in termini di malloc.


Mah... io sto studiando dal Lippman e questa suddivisione non mi risulta...
allora la suddivisione che vien fatta è tra oggetti locali (che comprendono oggetti automatici, oggetti locali statici 
ed oggetti registro) ed oggetti allocati dinamicamente.
La distinzione che tu fai tra oggetti statici ed oggetti automatici, nel Lippman viene
presentata come una differenza rispetto al ciclo di vita dell'oggetto, che in un caso dura per tutta
la durata del programma e nell'altro solo per la durata della funzione nel quale sono dichiarati.
Però tutti questi oggetti locali, appunto risiedono nello stack del programma.
Quelli invece allocati dinamicamente (tramite l'operate new(), in quanto malloc riguarda le funzioni C e non C++
se non erro) utilizzano la memoria dell'heap....
E sinceramente guardando anche gli altri libri i conti tornano...non capisco a cosa ti riferisci tu...


ed oggetti registro) ed oggetti allocati dinamicamente.
scusa mi stavo lasciando gli oggetti globali :)

 E sinceramente guardando anche gli altri libri i conti tornano..
forse dovresti scegliere meglio i libri da leggere ;-)))
Scherzi a parte, ecco cosa dice Sutter in "Exceptional C++", tema 35, 
"Gestione della memoria - Parte 1":
"""
Capite i cinque principali tipi di memoria, in cosa differiscono e come 
si comportano: stack (variabili automatiche); memoria libera 
(new/delete); heap (malloc/free); contesto globale (oggetti statici, 
variabili globali e cosi` via); dati costanti (letterali per le stringhe 
e cosi` via)


forse dovresti scegliere meglio i libri da leggere ;-)))
Guarda ammetto e son conscio di essere un perfetto newbie in programmazione c++, ma il libro che ho comprato 
è quello da voi spesso citato (magari non da te non ricordo) di Lippman, C++ Corso di Programmazione third edition 
(C++ Primer il testo originale).
Probabilmente non riesco a farmi spiegare, e non stiamo intendendo le stesse cose, 
ti ringrazio per la spiegazione e la pazienza, ora vado a prepararmi per il capodanno ...eheheh 
buon anno a tutti :)

 prepararmi per il capodanno ...eheheh buon anno a tutti :)
no, ti assicuro che parliamo della stessa cosa...
buon anno anche a te e a tutto il newsgroup


dynamic storage duration <=> heap
Capito, ora è tutto più chiaro, ed in effetti io mi stavo riferendo a un 
qualcosa non strettamente legato allo standard c++, tu invece facevi 
proprio riferimento a quello. Ti ringrazio ancora, e ti assicuro che mi fido di voi, 
se insisto è solo perchè cerco di capire bene, non per sollevar pretese o altro tranquillo :)
Ciao :)