将向量归零的最快方法<vector<bool>>

Posted

技术标签:

【中文标题】将向量归零的最快方法<vector<bool>>【英文标题】:Fastest way to zero out a vector<vector<bool> > 【发布时间】:2014-01-04 04:08:13 【问题描述】:

我尝试过这样的事情:

vector<bool> x(10, 0);
vector<vector<bool> > hello(10, x);

/*some modifications on hello*/

memset(&hello, 0, sizeof(hello));

我的程序可以编译,但它会中断。知道如何尽快完成此操作吗?我知道 memset 可能由于嵌套向量而无法工作,但我不确定如何完成此任务。

【问题讨论】:

第二个维度总是10吗?我的意思是永远? 你应该小心在 c++ 中使用memset,请参阅***.com/questions/1975916/… 即使它没有导致运行时错误,你最好完全清除外部向量并泄漏一些内存方式。 【参考方案1】:

我会使用它,它会重用您在问题中声明的 x 变量。

std::fill(hello.begin(), hello.end(), x);

【讨论】:

【参考方案2】:
for(auto& bv : hello) 
    std::fill(begin(bv), end(bv), false);

或者如果你想使用x作为原型

std::fill(begin(hello), end(hello), x);

【讨论】:

【参考方案3】:

有了你的代码,我会写……

for( auto& v : hello )  v = x; 

假设x 一直保持为零。够清楚,避免拖入&lt;algorithm&gt;

但是,将位矩阵的表示从向量向量更改为单个向量,或者如果它是固定大小,更改为单个 bitset 可能会更快。

【讨论】:

以上是关于将向量归零的最快方法<vector<bool>>的主要内容,如果未能解决你的问题,请参考以下文章

将现有数组归零的最快方法是啥?

将数组中的低值归零的最快方法?

将 std::vector<int> 的每个值重置为 0 的最快方法

用 SSE 在 C++ 中将两个 32 位整数向量相乘的最快方法

检查字节数组是不是全为零的最快方法

检查内存是不是清零的最快方法