来自向量 C++ 中字节表示的 Int

Int from byte representation in vector c++

我有一个长度为 n 的 vector<int>,它只包含 0 和 1。例如,我们可以有以下长度为 10 的向量:

0 1 1 0 1 0 0 1 0 0

现在我使用该向量表示的数字来访问具有 2^n 个条目的数组中的位置(因此在本例中为 2^10 = 1024 的数组)。我不确定如何从 vector<int> 中存储的字节表示中获取一个整数。

使用具有 to_ulong() 方法的 std::bitset (http://en.cppreference.com/w/cpp/utility/bitset)

简单地运行通过向量并收集2的幂。

这取决于您希望向量的哪一端作为最高有效数字,但是例如

auto to_int( const vector<int>& digits )
    -> int
{
    int result = 0;
    for( int const digit : digits )
    {
        result += 2*result + digit;
    }
    return result;
}

或者反过来,

auto to_int( const vector<int>& digits )
    -> int
{
    int result = 0;
    for( int i = (int)digits.size();  i --> 0; )
    {
        result += 2*result + digits[i];
    }
    return result;
}

免责声明:代码未经编译器审查。

使用 for 循环的简单方法:

size_t val{0};
for (const auto i : vec)
    val = (val << 1) + i;

像这样:

int integer=0;
int c=0;
for(int i : intVector){
    integer+=i<<c;
    c++;
}
return integer;

您可以保留 std::vector 并使用 std::bitset:

#include <iostream>
#include <vector>
#include <bitset>
#include <algorithm>
#include <climits>

template <typename IterType>
unsigned long getValue(IterType i1, IterType i2)
{
    unsigned long i = 0;
    std::bitset<CHAR_BIT * sizeof(unsigned long)> b;
    std::for_each(i1, i2, [&](auto n) { b.set(i++, n);});
    return b.to_ulong();
}

int main() 
{
    std::vector<int> v = {0, 1, 1, 0, 1, 0, 0, 1, 0, 0};
    auto val = getValue(v.rbegin(), v.rend());
    std::cout << val << "\n";;  
    auto val2 = getValue(v.begin(), v.end());
    std::cout << val2;  
}

请注意,根据哪个位是最高有效位,您可以相应地提供迭代器。对于 right-to-left,提供反向迭代器,否则提供正向迭代器。

Live Example