为何同一函数中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
相关产品推荐
相关产品推荐

