我有以下功能
std::vector<bool> buildBoolList(node* n)
{
std::vector<bool> boolList;
for(int i = 0; i < n->next.size(); i++)
{
int ival = atoi(n->next[i]->val.c_str());
bool b = !!ival;
boolList.push_back(b);
}
return boolList;
}
但是每次运行我的代码时,boolList总是返回大小为0.我运行调试器以确保atoi返回一个有效的数字,并且我也确保b成为适当的布尔值,但是我似乎无法弄清楚为什么没有填充boolList。
答案 0 :(得分:0)
std::vector<bool>
是C ++委员会的一种实验。它实际上是一个模板特化,它将紧密打包在内存中的bool值存储起来:每个值一位。
由于你不能引用一点,所以你可能会看到大小为0。 Why vector<bool>::reference doesn't return reference to bool?
vector<bool>
没有任何问题,除了它不等同于向量,T是等效于bool的整数类型。这仅表现在性能上(CPU一次只访问字节,其中vector<bool>
每个元素存储在一个位中)和内存访问(对向量的第一个元素的引用不等于像与任何其他vector<T>
。遗憾的是,它是标准的一部分:见第23.3.7节(C ++ 0x FDIS)
答案 1 :(得分:0)
我认为你的问题在于:
for(int i = 0; i < n->next.size(); i++)
{
int ival = atoi(n->next[i]->val.c_str());
我几乎可以肯定你的意思是:
for(node* i = n; i->next != NULL; i=i->next)
{
int ival = atoi(i->val.c_str());