Avendo membri della classe std::vector<double> v
e int n
, qual è la differenza tra utilizzando il seguente su questa vector
, che non viene inizializzato:STL vettore: ridimensionare() e assegnare()
v.assign(n, 0.0);
o
v.resize(n, 0.0);
Avendo membri della classe std::vector<double> v
e int n
, qual è la differenza tra utilizzando il seguente su questa vector
, che non viene inizializzato:STL vettore: ridimensionare() e assegnare()
v.assign(n, 0.0);
o
v.resize(n, 0.0);
immagino da non inizializzato, vuoi dire che è di default inizializzato, vale a dire, un vettore vuoto, quindi
v.assign(n, 0.0);
e
v.resize(n, 0.0);
sia cambia la dimensione del vettore a n
e tutti gli elementi a 0.0
. Si noti che per i vettori non vuoti, di solito non sono gli stessi,imposta solo i nuovi elementi su 0.0
.
assign
imposta la dimensione di n
e tutti i valori degli elementi a 0.0, mentre resize
imposta la dimensione di n
e solo nuova valori dell'elemento a 0.0.
Se v
è vuoto in anticipo, è lo stesso, ma lo assign
è probabilmente più chiaro.
Assign significa sostituire un vettore con nuove proprietà (dimensione ed elementi) Reszie significa tiene i vecchi dati e l'espansione del nuovo vettore con nuovi elementi questo caso il nuovo formato è maggiore di quello vecchio. altrimenti riduci le dimensioni ed elimina l'extra.
Eseguire il codice seguente due volte. Uno per assegnare il secondo per ridimensionare (basta decommentare il primo).
#include <iostream>
#include <vector>
int main()
{
std::vector<int> vec1;
vec1.assign(7,100);
// vec1.resize(7, 100);
std::cout << "Size: " << vec1.size() << std::endl;
for (unsigned int i(0); i < vec1.size(); ++i)
{
std::cout << vec1[i] << std::endl;
}
vec1.resize(4,5);
// vec1.assign(4,5);
std::cout << "\nSize: " << vec1.size() << std::endl;
for (unsigned int i(0); i < vec1.size(); ++i)
{
std::cout << vec1[i] << std::endl;
}
vec1.resize(10,5);
//vec1.assign(10,5);
std::cout << "\nSize: " << vec1.size() << std::endl;
for (unsigned int i(0); i < vec1.size(); ++i)
{
std::cout << vec1[i] << std::endl;
}
std::cin.get();
return 0;
}
Perché ho un downvote? – CroCo
Le risposte di solo collegamento non sono buone risposte. È necessario fornire contesto per i collegamenti. Verrà cancellato se non si migliora la risposta. –
Molto meglio. È ancora un po 'prolisso; le altre risposte sono più chiare in virtù del fatto che sono più brevi. – MSalters