|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
[C++] Uninitialized_fill e fill
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? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
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? Codice:
#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;
}
Ultima modifica di vendettaaaaa : 08-07-2012 alle 22:44. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2010
Città: Savona
Messaggi: 194
|
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/libr...(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/libr...(v=VS.80).aspx
__________________
AMD Phenom II X6 3Ghz, MB Gigabyte 790xta-ud4 F4A, 4Gb Ram ddr3, HD Segate Barracuda 1T, SV ASUS GTX 560 Ti DirectCu II ,Monitor Philips 1920x1080 led 2 ms, Xbox360 Slim, Tablet Asus Transformer Pad TF300T, Gameboy Advance, Ipod Touch 16Gb |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:31.



















