将向量归零的最快方法<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
一直保持为零。够清楚,避免拖入<algorithm>
。
但是,将位矩阵的表示从向量向量更改为单个向量,或者如果它是固定大小,更改为单个 bitset
可能会更快。
【讨论】:
以上是关于将向量归零的最快方法<vector<bool>>的主要内容,如果未能解决你的问题,请参考以下文章
将 std::vector<int> 的每个值重置为 0 的最快方法