问题描述
|
我想使用以下代码段
#include <iostream>
#include <iterator>
#include <vector>
#include <bitset>
#include <algorithm>
int _tmain(int argc,_TCHAR* argv[])
{
static const char szBits[] = \"110101011010\";
std::vector<std::bitset<4> > str(szBits,szBits + sizeof szBits);
std::copy(str.begin(),str.end(),std::ostream_iterator<std::bitset<4> > (std::cout,\"\\n\"));
return 0;
}
得到一个带有3个元素的向量
1101
1010
1010
但是我无法获得预期的正确结果。
你可以帮帮我吗?谢谢!
解决方法
std::vector<std::bitset<4> > str(szBits,szBits + sizeof szBits);
这显然是错误的。实际上,它是根据每个char
而不是4 char
来创建向量的项。
这是您应该做的:
static const char szBits[] = \"110101011010\";
std::vector<std::bitset<4> > str;
for(size_t i = 0 ; (i + 4) < sizeof(szBits) ; i += 4 )
str.push_back(std::bitset<4>(std::string(&szBits[i],4)));
std::copy(str.begin(),str.end(),std::ostream_iterator<std::bitset<4> > (std::cout,\"\\n\"));
输出:
1101
0101
1010
演示:http://www.ideone.com/27RNL