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

std::vector's push_back does not add the supplied value

本文关键字:添加 vector push std back      更新时间:2023-10-16

我有以下函数

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。

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

由于您不能引用一个位,因此您可能会看到大小为0。为什么矢量<bool>:引用没有';t返回对布尔的引用?

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

我认为您的问题在于:

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