You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何同一函数中push_back()仅对首个vector生效?求解答

问题原因与解决方案

你的问题根本不是push_back()的问题,而是输入流的处理逻辑错了,导致第二个vector根本没接收到任何数据。

为什么会出错?

第一个for (string s; cin >> s; )循环会一直读取字符串,直到输入流遇到**EOF(文件结束符)**或者输入了无法解析成字符串的内容才会停止。也就是说,你输入完Monday Tuesday Friday后按回车,cin不会停止,它会继续等你输入更多内容——只有当你手动触发EOF(Windows按Ctrl+Z,Linux/macOS按Ctrl+D),第一个循环才会结束。但这时候cin已经处于"输入结束"的状态了,第二个循环的cin >> x会直接失败,orders向量里完全是空的。后面你用orders[i]访问不存在的元素,自然会触发运行时错误。

怎么解决?

最可靠的方法是先让用户输入工作日的数量,然后按固定次数读取数据,这样两个vector的大小能保证一致,也不会出现输入流卡住的问题。修改后的代码如下:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int num_days;
    cout << "请输入本周工作日的天数:\n";
    cin >> num_days;

    // 收集工作日
    cout << "请输入这些工作日的名称(用空格分隔):\n";
    vector<string> days;
    for (int i = 0; i < num_days; ++i) {
        string s;
        cin >> s;
        days.push_back(s);
    }

    // 收集订单数
    cout << "请输入对应工作日的订单配送数量(用空格分隔):\n";
    vector<int> orders;
    for (int i = 0; i < num_days; ++i) {
        int x;
        cin >> x;
        orders.push_back(x);
    }

    // 打印对应对
    cout << "\n工作日与订单数对应关系:\n";
    for (int i = 0; i < days.size(); ++i) {
        cout << days[i] << " = " << orders[i] << " 订单\n";
    }

    return 0;
}

关于push_back()的补充

你并没有遗漏push_back()的知识点——它确实会把元素添加到vector的末尾。这次的问题完全是输入流的逻辑问题,和push_back()本身无关。

内容的提问来源于stack exchange,提问作者Spo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:30:21