Re: help with vector<vector<double>>
<mistabean@gmail.com> wrote in message...
Sorry to interrupt, but I have been using this method to initialize my
2D-Array for awhile
std::vector< std::vector <double> > array(nRow,
std::vector<double>(nCol, 0.0));
and fill it up index-wise, especially if the data is supposed to be
all over the place and not "column-wise" or "row-wise" insertion.
It works for me so far, however, being a newbie in programming, can
someone tell me what is the drawbacks of using this type of
initialization as opposed to methods suggested beforehand?
If you know the data size, it's best to reserve the memory. If you don't
know data size, push_back, and let it grow dynamically.
Check-out the output from this snippet (shown at end):
void PrintVec( std::vector<int> const &vec, std::ostream &sout){
sout<<" size="<<vec.size()
<<" cap="<<vec.capacity()<<std::endl;
return;
} // PrintVec(vector<int> const&,ostream&)
void VecIntSize( std::ostream &cout ){
cout<<"\n--- VecInt(10) size test ---"<<std::endl;
std::vector<int> VecInt( 10 );
PrintVec( VecInt, cout);
VecInt.push_back( 1 );
PrintVec( VecInt, cout);
for(size_t i(0); i < 11; ++i){ VecInt.push_back( i );}
PrintVec( VecInt, cout);
VecInt.resize( 50 );
PrintVec( VecInt, cout);
VecInt.push_back( 1 );
PrintVec( VecInt, cout);
VecInt.resize( 40 );
PrintVec( VecInt, cout);
cout<<" std::vector<int>().swap( VecInt );"<<std::endl;
std::vector<int>().swap( VecInt );
PrintVec( VecInt, cout);
cout<<"--- VecInt(10) size test ---END"<<std::endl;
return;
}
/* --- VecInt(10) size test ---
size=10 cap=10
size=11 cap // note how capacity doubled
size=22 cap=40 // .... and again
size=50 cap=50 // resize
size=51 cap=100 // push_back
size=40 cap=100 // size reduced, capacity stayed same
std::vector<int>( ).swap( VecInt ); // funky, but 'resets' vector
size=0 cap=0
--- VecInt(10) size test ---END
*/
So, if you did something like:
std::vector<int> VecInt;
VecInt.reserve( 100 ); // sets 'capacity', not 'size'
.... and then somewhere you did:
VecInt.push_back( 1 ); // this is the 101st push_back
.... you kind-of shot yourself in the foot (it needs to realloc and copy).
No big thing for small vectors, but costs time on very big vectors.
(....and you could run out of memory during the realloc/copy).
--
Bob R
POVrookie