So, I recently figured out, that we can initialize an n sized vector with default values by writing e.g. vector<int> x(n, default_value)
.
This can also be applied to n dimensional vectors, e.g. n=3:
vector<vector<vector<int>>> x(n, vector(n, vector(n, default_value)))
Has this approach any advantages or disadvantages over doing:
vector<vector<vector<int>>> x;
x.resize(n);
for (int i = 0; i < n; i++)
{
x[i].resize(n);
for (int j = 0; j < n; j++)
{
x[i][j].resize(n);
}
}
The first one first creates default_value
for each vector and then copies it to the destinations, so you get (n+1)^k
allocations instead of n^k
.
You forgot to initialize the integer-based vector. Therefore I argue the first version is less error-prone ;) It's also much cleaner and shows the intention clearly.
Although second could benefit from for(auto& c:vec)
loops instead of indices. Or std::for_each
, or any other loop-hiding stuff... Anyway you are doing initialization -> just use constructors.