gpt4 book ai didi

C++:访问由另一种方法返回的 vector 的常量 vector 时出现段错误

转载 作者:行者123 更新时间:2023-11-27 23:56:44 25 4
gpt4 key购买 nike

我的目标是从输入流中填充一个常量 vector vector 。我能够这样做并使用 readVector() 方法打印构造的 vector ,如下所示。

但是当我尝试使用 std::vectorat() 例程访问特定值时,它会产生错误 out of bounds。尽管我能够打印整个 vector ,但我什至无法访问二维 vector 的 [0, 0] 元素。

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

inline const int myread() {
int n;
cin >> n;
return n;
}

const vector< vector <int> > readVector (const int &n) {
int i, j;
vector< vector <int> > v (n);

// Populate the vector v.
for (i = 0; i < n; i++) {
const int rs = myread(); // row size

// construct an internal vector (iv) for a row.
vector <int> iv(rs);
for (j = 0; j < rs; j++) {
cin >> iv[j];
}

// Append one row into the vector v.
v.push_back (iv);
}
return v;
}

int main() {
const int n = myread();

// Construct a 2d vector.
const vector< vector <int> > v (readVector (n));

// Prints the vector v correctly.
for (vector <int> k : v) {
for (int l : k) {
cout << l << " ";
}
cout << endl;
}

// Produces the out of bounds error shown below
cout << v.at(0).at(0);
return 0;
}

A run:

Input: (two rows with elements 1, 5, 4 and 1, 2, 8, 9, 3, respectively.)

2
3 1 5 4
5 1 2 8 9 3

Output:

1 5 4
1 2 8 9 3

在抛出“std::out_of_range”实例后调用终止
what(): vector::_M_range_check: __n(即 0)>= this->size()(即 0)

我是 C++ 的新手。请帮助我。

最佳答案

问题是线路

vector< vector <int> > v (n);

已经创建了一个 vector ,其中包含 nint vector ,每个 vector 的大小为 0。行

v.push_back (iv);

在空 vector 之后推送新 vector 。您应该使用赋值或创建一个空 vector

vector< vector <int> > v;

只打印 vector 大小

std::cout << v.size() << std::endl;

在每次迭代中,看看会发生什么。

关于C++:访问由另一种方法返回的 vector 的常量 vector 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42187364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com