【问题标题】:C++ vector push_back functionC++ 向量 push_back 函数
【发布时间】:2025-11-27 23:15:02
【问题描述】:

所以我对编码很陌生,并且在使用 push_back 函数将用户输入存储到向量中时遇到了一些问题。谁能告诉我我做错了什么?

  vector<int> user_nums;

     switch(selection){
        case 'P':
        case 'p':
            if(user_nums.empty()){
                cout << "[]- list is empty" << endl;
            }else{
                for(auto nums: user_nums)
                    cout <<"[ " << nums << " ]" << endl;
            }
            break;
        case 'A':
        case 'a':
            int new_num;
            cout << "\nEnter a number you would like to add: ";
            cin >> new_num;
             user_nums.push_back(new_num);
            cout << new_num << " was added" << endl;
            break;

这是在一个 do while 循环中。代码执行得很好,问题是当我提示用户添加一个新数字时,该值不会存储在向量中。所以当用户选择打印数字时,列表仍然显示为空。

【问题讨论】:

  • 您遇到了什么具体问题?您是否收到编译器错误?如果是这样,你能edit your question 并添加编译器输出吗?
  • 另外,当您使用它时,您可以将您的代码复制并粘贴为文本吗?图片可能更难阅读。
  • 请查看“How to Ask”和链接页面以及“mcve”。代码必须是在问题正文中演示问题的最小示例,而不是图像。
  • 图像很难阅读,但我在上面看到了调试器选项。调试器就是炸弹。您可以逐行逐行执行程序,寻找意外情况。意外通常是错误。
  • 很抱歉这是我第一次来这里我不知道。我将更新问题并复制代码。很抱歉给您带来不便

标签: c++ vector push-back


【解决方案1】:

因此,您在这里缺少代码中最相关的部分。你真的应该发布minimal, reproducible example。通常,创建一个的过程会导致您发现问题。

但在这种情况下,这已经足够明显了。有一个循环包装了所有这些代码。 vector 在循环内声明。这意味着,在循环的底部,vector 将被销毁,然后随着循环再次执行,将创建一个新的空vector

解决方案是将vector 的声明移到循环之外。

如果我对您未向我们展示的代码结构猜错了,请按照我上面链接的指南进行操作。

【讨论】:

  • @PatrickGillen - 虽然我不关心这些要点,但礼貌的做法是通过单击旁边的复选标记来接受您认为最好的答案。另外,您是否了解自己做错了什么以及为什么会得到您得到的结果?
  • 对不起,我接受了。是的,我愿意。我在我的 do-while 循环中声明了向量,因此我试图从用户那里存储的输入永远不会因为循环而实际存储在那里。当我在循环之外声明它时,它实际上能够存储在向量中,因为它没有在循环结束时被销毁。感谢您的帮助,再次对问题的格式不佳表示歉意。
  • @PatrickGillen - 没关系。你在学习。关于代码图片的观点适用广泛。因此,即使在无法轻松格式化代码的地方,也可以链接到 pastebin(如 pastebin.com)而不是粘贴图片。