c++ 用构造函数初始化一个n维向量是错误的吗?

qoefvg9y  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(175)

所以,我最近发现,我们可以用默认值初始化一个n大小的向量,比如写vector<int> x(n, default_value)
这也可以应用于n维向量,例如n=3:

vector<vector<vector<int>>> x(n, vector(n, vector(n, default_value)))

与以下做法相比,此方法是否有任何优点或缺点:

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);
    }
}
r6vfmomb

r6vfmomb1#

第一个函数首先为每个向量创建default_value,然后将其复制到目的地,因此您得到的是(n+1)^k分配,而不是n^k
你忘了初始化基于整数的向量,因此我认为第一个版本更不容易出错;)也干净多了,表达的意图也很清楚。
虽然second可以从for(auto& c:vec)循环中受益,而不是索引,或者std::for_each,或者任何其他隐藏循环的东西...无论如何,你正在做初始化-〉只是使用构造函数。

相关问题