【发布时间】:2021-11-07 10:39:35
【问题描述】:
我今天试图访问矢量元素,所以当我使用vector<vector<int>> vec 然后向它添加元素时。我能够访问像vec[1][2] 这样的元素。
但是当我使用vector<vector<int>> vec(n) 然后添加元素时,我无法使用vec[1][2] 访问元素。我不断收到分段错误。有谁知道我在这里错过了什么?
我在下面的代码 sn-p 的帮助下将元素添加到向量中。
int n;
cin >> n;
vector<vector<int>> vh;
int size, input;
for (int i = 0; i < n; i++)
{
vector<int> temp;
cin >> size;
for (int j = 0; j < size; j++)
{
cin >> input;
temp.push_back(input);
}
vh.push_back(temp);
}
【问题讨论】:
-
此外,当您越界时,使用向量的任何一种尝试似乎都会导致 未定义的行为。请edit您的问题包括正确的minimal reproducible example。
-
请创建一个minimal reproducible example。问题可能在于您如何“添加元素”,但我们无法猜测您是如何做到的。
-
您在第一种情况下创建了一个空向量,但在第二种情况下创建了一个由
n空向量组成的向量。在第一种情况下,使用第一个[]运算符的任何访问都会导致未定义的行为(可能包括段错误);在第二种情况下,您仍然需要在第二个向量中添加至少 3 个元素才能在使用vec[1][2]时获得未定义的行为(假设n >=2) -
你是否在学习如何使用
std::vector的教程?
标签: c++ c++11 vector segmentation-fault stdvector