首页 > 解决方案 > 有没有办法总结数组的位位置?

问题描述

假设我有一个像 [1,2,3] 这样的数组,它们对应的位值是 [0001, 0010, 0011]

我想得到一个数组来记住它们的位位置出现为 ar[4] = {0,0,2,2}。

我能想出的唯一方法是使用bitset'sto_string将值传输到位串。然后使用stoi迭代并添加到数组。这很复杂,有没有更好的方法来解决这个问题?

标签: c++algorithmbit-manipulation

解决方案


我想你正在寻找这样的东西。我不确定你为什么需要to_string,除非我从你的描述中遗漏了一些东西。

#include <iostream>
#include <bitset>
#include <vector>

int main()
{
    const int num_bits = sizeof(int) * 8;
    std::vector<int> values = { 1,2,3 };
    int result[num_bits] = {};
    std::bitset<num_bits> bits;
    for (size_t i = 0; i < values.size(); ++i)
    {
        bits = values[i];
        for (int bit = 0; bit < num_bits; ++bit)
        {
            result[bit] += bits[bit];
        }
    }
    for (auto num : result)
    {
        std::cout << num << " ";
    }
    std::cout << "\n";
    return 0;
}

推荐阅读