【发布时间】:2016-11-26 13:20:38
【问题描述】:
这是我写的:
#include <iostream>
#include <vector>
int main()
{
std::vector<char> v = {0, 0, 0};
v[0] = v[0] == 0 ? 1 : 0;
v[1] = !v[1];
v[2] ^= 1;
std::cout << (int)v[0] << (int)v[1] << (int)v[2] << "\n";
return 0;
}
切换所有位,但我实际上只关心更改第 i 位。
我感兴趣的是在c++ 项目中应该使用哪一种方式,而您唯一关心的是速度(而不是内存和可读性)?
使用std::vector<char>作为bitset的原因是in my timings I found that it's faster than a vector of ints or chars, and std::bitset。
【问题讨论】:
-
您所说的“我应该使用哪一个”是什么意思——显然这四个操作中只有 一个 会产生正确的结果?!
-
Kerrek 更新了! @Raindrop7 没经验,能解释一下吗?
-
xor 和前两个具有不同的语义(对于不同于 0 或 1 的初始值)。
-
你的意思是:
v[2] ^= 1;而不是v[3] -
@Raindrop7 好吧,他将它们用作位集。至于实际的 std::bitset,有时在无法静态证明索引在范围内时会产生开销,但通常没问题。虽然它不是很灵活,所以你经常会在它上面调用
to_ulong,做一些操作,然后转换回来..
标签: c++ c++ algorithm vector bit-manipulation toggle