-2

我有以下功能

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 成为适当的布尔值,但是我可以' t 似乎弄清楚为什么 boolList 没有被填充。

4

2 回答 2

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());
于 2013-07-29T08:03:23.607 回答
0

std::vector<bool>一直是 C++ 委员会的一种实验。它实际上是一个模板特化,将 bool 值紧密地存储在内存中:每个值一个位。

而且由于您无法引用位,因此您可能会将大小视为 0。 为什么 vector<bool>::reference 不返回对 bool 的引用?

没有任何问题vector<bool>,除了它不等同于向量,因为 T 是等同于 bool 的整数类型。这仅显示在性能(CPU 一次仅访问字节,其中vector<bool>每个元素都存储在一个位中)和内存访问(对向量的第一个元素的引用不等同于与任何其他数组一样的数组vector<T>。它不幸的是,它是标准的一部分:请参阅第 23.3.7 节(C++0x FDIS)

于 2013-07-29T07:43:00.613 回答