我通常将 .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);
}
这似乎有效,但效率高吗?
答案 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
初始化 bool
的 false
的最有效方法是不这样做:bool
的默认初始化是 false
。你在声明之后就完成了:
std::array<std::array<bool, 3>, 3> wasPlayed;