std :: vector push_back不添加提供的值

时间:2013-07-29 07:25:28

标签: c++ vector stl

我有以下功能

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。

2 个答案:

答案 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());