Entra

View Full Version : [C++] Uninitialized_fill e fill


vendettaaaaa
06-07-2012, 22:47
Ciao,
che differenza c'è tra queste due funzioni? cplusplus.com dice che

uninitialized_fill constructs elements in the range and initialized them to the given value

mentre

fill copies val to all the elements in the range.

Se io ho appena allocato spazio diciamo per 4 double (non inizializzandoli) e ho i due puntatori che delimitano questo spazio, non ottengo lo stesso effetto usando l'una o l'altra (nel mio programma, sì)?
La differenza sta solo che fill necessita che gli oggetti abbiamo un copy constructor mentre uninitialized_fill usa un costruttore "standard"? O ci sono sottigliezze che non comprendo?

vendettaaaaa
08-07-2012, 21:42
UP!

Intanto, sto cominciando a scrivere una classe per matrici double. Ho pensato di basarmi sull'uso di allocator per gestire dinamicamente la memoria, che ne pensate?
#include <iostream>
#include <memory>

using namespace std;

int main()
{
double** matrix;
double* aux;
int r = 3, c = 4;
allocator<double> auxAlloc;
allocator<double*> matrixAlloc;

matrix = matrixAlloc.allocate(r);
for (int i = 0; i < r; ++i) {
aux = auxAlloc.allocate(c);
uninitialized_fill(aux, aux + c, 2.);
matrix[i] = aux;
}

cout << "matrix =" << endl;
for (int i = 0; i < r; ++i) {
for (int j = 0; j < c; ++j)
cout << matrix[i][j] << " ";

cout << endl;
}

return 0;
}

Ci sono alternative migliori?

AllerITA
08-07-2012, 22:07
Guardando su MSDN sembra che la differenza e' data dal fatto che
Uninitialized_fill
è usato su oggetti non inizializzati coma dice qui:

http://msdn.microsoft.com/en-us/library/a3txak8w(v=VS.80).aspx

mentre per usare fill sembra che sia applicabile anche ad elementi già inizializzati
come sembra dire qui:

http://msdn.microsoft.com/en-us/library/kaxe2wy9(v=VS.80).aspx