c++ - 切换表示为字符的位的 3 种方法

标签 c++ algorithm vector bit-manipulation toggle

我是这样写的:

#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 个位。

我感兴趣的是在 中应该使用这些方法中的哪一种?项目,当您唯一关心的是速度(而不是内存和可读性)时?


使用std::vector<char>的原因作为一个位集是 in my timings I found that it's faster than a vector of int s or char s, and std::bitset .

最佳答案

只要您对位感兴趣,您可以改用 std::bitset 或直接使用 bool 而非 char 的 vector :

#include <iostream>
#include <vector>

int main()
{
    std::vector<bool> v = { 0, 0, 0 };

    for (int i(0); i < v.size(); i++)
        v[i] = !v[i];

    for (int i(0); i < v.size(); i++)
        std::cout << (int)v[i];

    std::cout << std::endl;

    std::cin.get();
    return 0;
} 
  • 推荐使用 按位非 !,因为它速度快且干净。

关于c++ - 切换表示为字符的位的 3 种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40818748/

相关文章:

c++ - 用于模板参数的引用

javascript - 是否有在 JavaScript 中创建填充数组的快捷方式?

algorithm - 距离矢量算法 - 4 点的最大路径

r - 将向量转换为类似矩阵的对象

c++ - Qt 5 dds 支持以节省内存并改善渲染

C++ 空指针

c++ - 不断弹出无效输入?

java - transform 方法没有在 MAIN 方法中调用?

arrays - 组合与向量中重复的相邻值相对应的值

math - 如何检查m n个向量是否线性独立?