好的,有人告诉我哪个会更好。我需要 |= 一个向量的元素与另一个向量。也就是说,我想
void orTogether(vector<char>& v1, const vector<char>& v2)
{
typedef vector<char>::iterator iter;
for (iter i = v1.begin(), iter j = v2.begin() ; i != v1.end(); ++i, ++j)
*i |= *j;
}
由于需要处理 2 个集合,我无法使用 for_each。我想我可以做类似的事情
struct BitWiseOr
{
char operator()(const char& a, const char& b) {return a | b;}
};
void orTogether2(vector<char>& v1, const vector<char>& v2)
{
transform(v1.begin(), v1.end(), v2.begin(),
v1.begin(), BitwiseOr());
}
这是一个更有效的解决方案,即使顶部已经到位,但底部是分配?这正好在处理循环的中间,我需要尽可能快的代码。
编辑:为 BitwiseOr 添加(很明显?)代码。另外,我收到了很多关于不相关的评论,比如检查 v2 的长度和更改名称。这只是一个例子,真正的代码更复杂。
好吧,我介绍了两者。orTogether2 比 orTogether 快得多,所以我将使用 transform 方法。我很惊讶,orTogether2 在 MSVC9 发布模式下快了大约 4 倍。我运行了两次,第二次更改了顺序以确保它不是某种缓存问题,而是相同的结果。感谢大家的帮助。