简体   繁体   中英

Is it okay to use constructors to initialize a 2D Vector as a one-liner in C++?

Is it okay to initialize a 2D vector like this (here all values in a 5x4 2D vectro are initialized to 3)?

std::vector<std::vector<int> > foo(5, std::vector<int>(4, 3));

This seems to behave okay, but everywhere I look on the web people seem to recommend initializing such a vector with for loops and push_back(). I was initially afraid that all rows here would point to the same vector, but that doesn't seem to be the case. Am I missing something?

This is perfectly valid - You'll get a 2D vector ([5, 4] elements) with every element initialized to 3.

For most other cases (where you eg want different values in different elements) you cannot use any one-liner - and therefore need loops.

Well, the code is valid and it indeed does what you want it to do (assuming I understood your intent correctly).

However, doing it that way is generally inefficient (at least in the current version of the language/library). The above initialization creates a temporary vector and then initializes individual sub-vectors by copying the original. That can be rather inefficient. For this reason in many cases it is preferrable to construct the top-level vector by itself

std::vector<std::vector<int> > foo(5);

and then iterate over it and build its individual sub-vectors in-place by doing something like

foo[i].resize(4, 3);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM