PDA

View Full Version : [C++] Domanda su Vector


Unrue
02-04-2009, 08:39
Ciao a tutti,
vorrei inserire in un vector elementi di questo tipo:


typedef pair<string, int[3] > dirAttributes;
vector< dirAttributes > check_dir_names;

poi ad esempio:

int attr[3];
a[0] = 0;
a[1] = 1;
a[2] = 2;
string str("ciao");


poi in una funzione apposita:


void insertelems(string str, int[] attr){

dirAttributes dirAttr(str,attr);

check_dir_names.push_back(dirAttr);

}

è lecita una cosa del genere? Lui fa una deep copy dell'array di interi o copia solo il riferimento? Perchè se mi copia il riferimento e l'array che passo è locale in un punto del codice poi fa casino.

cionci
02-04-2009, 14:07
Non viene fatta una copia, questa secondo te cosa rende in output ?

void copia(int pippo[3])
{
pippo[2] = 1;
}


int main()
{
int a[3];
a[0] = a[1] = a[2] = 0;

copia(a);

cout << a[0] << a[1] << a[2];

return 0;
}

Unrue
02-04-2009, 18:09
Non viene fatta una copia, questa secondo te cosa rende in output ?


Ciao,
però nel libro Wrox Professional C++ dice che il metodo push_back copia i valori passati nel vettore..

Per la precisione:

push_back() and insert() take const references to elements, allocate memory as
needed to store the new elements, and store copies of the element arguments.

La domanda è se vale anche con elementi di tipo int*

Unrue
02-04-2009, 22:42
No, con int* non funziona, ho provato. Ma allora non capisco che intenda sul libro.

cionci
03-04-2009, 02:24
No, con int* non funziona, ho provato. Ma allora non capisco che intenda sul libro.
Intende che viene creata una nuova copia. Usano il costruttore di copia...fidati ;) Il costruttore di copia con int * funziona come nell'esempio che ti ho fatto ;)

Unrue
03-04-2009, 08:28
Intende che viene creata una nuova copia. Usano il costruttore di copia...fidati ;) Il costruttore di copia con int * funziona come nell'esempio che ti ho fatto ;)

Ok, che poi torna anche: Se gli passo un int*, lui non può sapere quanti elementi ci sono all'interno, quindi come potrebbe fare una copia? Seocndo me nel libro non è spiegato bene. Comunque grazie ;)

tomminno
03-04-2009, 12:25
Ok, che poi torna anche: Se gli passo un int*, lui non può sapere quanti elementi ci sono all'interno, quindi come potrebbe fare una copia? Seocndo me nel libro non è spiegato bene. Comunque grazie ;)

Beh semplicemente copia il puntatore...