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

时间:2017-02-12 13:58:01

标签: c++ arrays indexing stdvector

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

0 1 1 0 1 0 0 1 0 0

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

5 个答案:

答案 0 :(得分:2)

简单地浏览向量并收集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;
}

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用for循环的简单方法:

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

答案 3 :(得分:0)

这样的事情:

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

答案 4 :(得分:0)

您可以保留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;  
}

请注意,根据哪个位是最重要的位,您可以相应地提供迭代器。对于从右到左,提供反向迭代器,否则提供前向迭代器。

Live Example