C++中使用cin为vector容器添加元素的相关疑问
C++中使用cin为vector容器添加元素的相关疑问
嗨~刚接触C++和Stack Overflow的话,这个问题其实挺典型的,我来给你唠明白!
首先直接给结论:你直接写cin >> n[i]在循环里是行不通的,甚至会出问题。为啥呢?因为你定义vector<int> n;的时候,这个vector默认是空的,连一个元素都没有。n[i]是通过下标访问第i个元素,但这时候根本不存在这个位置,属于「越界访问」,是C++里的未定义行为——程序可能直接崩溃,可能输出一堆乱码,甚至看起来“正常运行”但偷偷搞坏了内存,绝对不能这么写哈!
那正确的做法有哪些呢?给你举几个常用的:
1. 提前确定元素个数,先分配空间再输入
如果你知道要输入多少个元素,比如用户先告诉你数量,那可以先给vector分配好空间,再用下标输入:
#include <iostream> #include <vector> using namespace std; int main() { int count; cout << "先告诉我要输入几个整数:"; cin >> count; vector<int> n(count); // 直接初始化出count个元素,默认值是0 for (int i = 0; i < count; ++i) { cout << "输入第" << i+1 << "个整数:"; cin >> n[i]; // 这时候n[i]是合法存在的位置,没问题 } // 验证一下输入的内容 cout << "你输入的元素是:"; for (int num : n) { cout << num << " "; } return 0; }
或者也可以先定义空vector,再用resize分配空间:n.resize(count);,效果和上面一样。
2. 不确定元素个数,动态添加元素(更常用)
如果不知道要输入多少个,比如让用户一直输入直到不想输了(比如输入非整数或者按Ctrl+D/Ctrl+Z结束),这时候用push_back或者emplace_back来动态往vector末尾加元素就最合适了:
#include <iostream> #include <vector> using namespace std; int main() { vector<int> n; int num; cout << "开始输入整数吧,输入非数字就结束:" << endl; // 只要cin能成功读取到整数,就继续循环 while (cin >> num) { n.push_back(num); // 把刚读到的数字塞进vector末尾 // 也可以用n.emplace_back(num); 效率略高,新手先记push_back就行 } cout << "你一共输入了" << n.size() << "个元素:"; for (int val : n) { cout << val << " "; } return 0; }
3. 非要用下标?那得先扩容
如果你铁了心想用n[i]的方式输入,那必须先给vector扩容,保证i对应的位置存在。比如用resize提前开好空间:
vector<int> n; n.resize(5); // 现在vector里有5个初始为0的元素 for (int i = 0; i < 5; ++i) { cin >> n[i]; // 这时候访问n[i]就合法了 }
刚学C++的话,不用太纠结push_back和emplace_back的细微区别,先把push_back用熟练就行~有其他问题随时问哈!




