【发布时间】:2021-07-27 04:27:18
【问题描述】:
我通常将.fill() 与一维数组和向量一起使用,但它似乎不适用于多维数组和向量。
我见过很多填充它们的方法,但我想知道最有效的方法是什么。
std::array<std::array<bool, 3>, 3> wasPlayed;
wasPlayed.fill(false);
这不起作用,用false 值填充wasPlayed 的最高效方法是什么?
玩了一下,发现是这样的:
for(int i = 0; i < 3; i++){
wasPlayed[i].fill(false);
}
这似乎有效,但它有效吗?
【问题讨论】:
-
最高效的可能是创建一个类,包装一维数组,然后创建一个
operator()(y,x)以便能够将其作为二维数组访问。 -
“好”到底是什么意思?
-
@Zoso 与人们给出的答案一样/更有效
-
如果您担心效率,那么可能完全避免二维数组的双重间接,只需分配一个块并为数组索引。然后归结为使用
memset()等设置具有值的内存块。 -
@Justin 从值初始化page, "4) 否则,对象被零初始化。", meaning "如果T是一个标量类型,对象的初始值是显式转换为 T 的整数常量零。".在标准中你可以找到7.3.15 conv.bool "算术纯右值,...类型可以转换为布尔类型的纯右值。零值,...转换为假;任何其他值都转换为真的。”.
标签: c++ arrays performance vector multidimensional-array