我有vector<int>
长度n,只包含0和1。例如,我们可以得到以下长度为10的向量:
0 1 1 0 1 0 0 1 0 0
现在我使用该向量表示的数字来访问具有2 ^ n个条目的数组中的位置(因此在这种情况下,数组为2 ^ 10 = 1024)。我不确定如何从此vector<int>
中存储的字节表示中获取一个整数。
答案 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;
}
请注意,根据哪个位是最重要的位,您可以相应地提供迭代器。对于从右到左,提供反向迭代器,否则提供前向迭代器。