C++二维vector下标越界问题求助:Codeforces题目实现报错
解决vector下标越界问题
你的代码触发“vector subscript out of range”错误的核心原因是:vector<vector<int>>x(t) 仅创建了包含t个空vector的二维容器,每个子vector没有任何元素,直接通过x[i][j]访问下标自然会越界。
以下是三种可行的修复方案:
方案1:提前resize子vector空间
先给第i行的子vector分配n[i]个元素的空间,之后就可以用下标直接赋值:
#include <iostream> #include <vector> using namespace std; int main() { int t; cin >> t; vector<int> n(t); vector<vector<int>> x(t); for (int i = 0; i < t; i++) { cin >> n[i]; x[i].resize(n[i]); // 为第i行分配n[i]个元素的空间 for (int j = 0; j < n[i]; j++) { cin >> x[i][j]; } } return 0; }
方案2:用push_back逐个添加元素
不需要提前分配空间,读取一个元素就添加到对应子vector中:
#include <iostream> #include <vector> using namespace std; int main() { int t; cin >> t; vector<int> n(t); vector<vector<int>> x(t); for (int i = 0; i < t; i++) { cin >> n[i]; int num; for (int j = 0; j < n[i]; j++) { cin >> num; x[i].push_back(num); // 自动扩展子vector空间 } } return 0; }
方案3:用emplace_back直接构造子vector
在二维vector中直接构造指定大小的子vector,避免额外拷贝操作:
#include <iostream> #include <vector> using namespace std; int main() { int t; cin >> t; vector<int> n(t); vector<vector<int>> x; for (int i = 0; i < t; i++) { cin >> n[i]; x.emplace_back(n[i]); // 构造大小为n[i]的子vector并加入x for (int j = 0; j < n[i]; j++) { cin >> x[i][j]; } } return 0; }
内容的提问来源于stack exchange,提问作者غيمرمان Gamerman
相关产品推荐
相关产品推荐

