填充 2d std::array 和 std::vector 的最有效方法是什么?

时间:2021-05-04 19:50:44

标签: c++ arrays performance vector multidimensional-array

我通常将 .fill() 用于一维数组和向量,但它似乎不适用于多维数组。 我见过很多方法来填充它们,但我想知道最有效的是什么。

std::array<std::array<bool, 3>, 3> wasPlayed;
wasPlayed.fill(false);

这不起作用,用 wasPlayed 值填充 false 的最佳方法是什么?

我玩了一会儿,发现是这样的:

for(int i = 0; i < 3; i++){
    wasPlayed[i].fill(false);
}

这似乎有效,但效率高吗?

3 个答案:

答案 0 :(得分:0)

正如这里 using std::fill on a 2D int vector 所引用的,嵌套循环可能是更快地填充它们的最佳选择 (基于@juanchopanza 的评论)

vector<vector<int> > a(3,vector<int>(3));

for (int i = 0 ; i < 3; i++)
   fill(a[i].begin(),a[i].end(),falseValues);

对于 c++14 及以上,您也可以使用

for_each(a.begin(),a.end(),[](vector<int>& aa)
    {fill(aa.begin(),aa.end(),falseValues);});

答案 1 :(得分:0)

一种方式,如果你想使用数组的数组会是这样的

for(auto& row: wasPlayed) {
    row.fill(true);
}

答案 2 :(得分:0)

使用 std::array 初始化 boolfalse 的最有效方法是不这样做:bool 的默认初始化是 false。你在声明之后就完成了:

std::array<std::array<bool, 3>, 3> wasPlayed;