【问题标题】:vector push_back doesn't work c++矢量 push_back 不起作用 C++
【发布时间】:2017-03-03 15:20:40
【问题描述】:

为什么 push_back 没有按预期工作?很困惑为什么它不适用于我下面的当前代码

using namespace std;
void addItem(vector<string>& STRING, string item)
{
    STRING.push_back(item);
}

int main()
{
    string item;
    vector<string> STRING(100);
    ifstream myFile;
    myFile.open("food.txt");

    if (myFile.is_open()) //code where I store my data into the array
    {
        int i = 0;
        while (!myFile.eof())
        {
            getline(myFile, STRING[i]);
            i++;
        }
    }
    myFile.close();

    cin >> item;
    addItem(STRING, item);
    int x = 0;
    while(!STRING[x].empty()) //code to print the current array
    {
        cout << STRING[x];
        printf("\n");
        x++;
        return 0;
    }
}

我初始化数组的方式有问题吗?因为当我使用 CodeBlocks 时,有 0 个错误和 0 个警告,所以在我运行它之前我认为它很好。

【问题讨论】:

  • 请提供minimal reproducible example,我们可以重现该问题..
  • 如果您的printList 是您在最小代码中显示的while 循环,那么这是完全错误的。此外,您从未真正检查过向量的长度是否发生了变化,那么您是如何确定它没有变化的呢?
  • 重构您的代码,使数字 100 不会在任何地方硬编码。将STRING 初始化为空并使用push_back 从头开始​​添加。将变量重命名为strings,因为STRING 看起来像一个宏。不要在循环条件中使用eof。最后,避免using namespace std;。哦,考虑std::cout 而不是printf

标签: c++ string vector push-back


【解决方案1】:

您的代码确实有效。但是,您在创建向量时指定了向量的初始大小。您的向量以 100 个元素的初始大小开始。话虽如此,您确实是在向数组中添加新元素,但是 push_back() 将它放在已经存在的数组之后 - 第 100 位。

你可以通过使用默认构造函数来避免它

vector<string> STRING;

另外,我将在这里粘贴我的 printList 函数,它会告诉你问题出在哪里:

void printList(vector<string> &STRING)
{
    cout << "size: " << STRING.size() << '\n';
    for (int i = 0; i < STRING.size(); i++)
        cout << i << ":" << STRING[i] << ", ";
    cout << '\n';
}

@Edit:修复了语法错误(向量而不是向量)。感谢您指出 Christian Hackl!

【讨论】:

  • 谢谢老兄,您的 printList 功能有效,现在我看到了问题
  • 您的答案中有一个错字,上面写着Vector,而不是vector。你应该使用'\n' 而不是std::endl
  • @ChristianHackl 修正了错字,感谢您指出!您能否详细说明 '\n' 而不是 std::endl 部分?我所知道的所有区别在于 std::endl 每次使用都会刷新输出(因此,如果过度使用,性能会下降)。
  • @Kosmo:差不多就是这个原因。换行后不必一直刷新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
相关资源
最近更新 更多