You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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_backemplace_back的细微区别,先把push_back用熟练就行~有其他问题随时问哈!

火山引擎 最新活动