我正在尝试使用矢量创建一个2D数组。我写了以下代码:
int main() {
vector< vector<int> > v;
int i, j;
for(i=0; i<11; i++)
for(j=0; j<11; j++)
v[i].push_back(j);
for(i=0; i<11; i++) {
for(j=0; j<11; j++)
cout<<v[i][j]<<" ";
cout<<endl;
}
return 0;
}
现在我期待它打印数字0到10,十一次(每次都在新行中)。但是代码给出了运行时错误(分段错误)。谁能告诉我哪里出错了?
感谢。
答案 0 :(得分:7)
当你声明任何东西的矢量时,它还没有任何元素。
因此:
v[i].push_back(j)
试图将j插入到位置i的向量v内的不存在的向量中。
在这种情况下,如果您知道大小,则应使用构造函数中所需的元素数初始化向量:
vector<vector<int> > v(11);
初始化向量v,里面有11个空向量。
答案 1 :(得分:1)
当您尝试访问不可用的内存时,会发生分段错误。通常在使用向量时,这意味着您正在访问向量之外的元素(太高或太低)。
当您使用vector
时,请始终使用size()
中的for loops
函数,因为它可以防止它超越。您很可能通过转0...10
来访问向量大小之外的元素(它将返回11个元素,并且无论如何它都未被初始化)。
答案 2 :(得分:1)
你没有推测第一级媒介。
for(i=0; i<11; i++)
vector<int> subVector;
v.push_back(subVector);
for(j=0; j<11; j++)
v[i].push_back(j);
答案 3 :(得分:0)
v[i]
尚不存在,您的向量向量为空。
将其更改为vector< vector<int> > v(11);
,以获得一个包含11个向量的初始向量。
答案 4 :(得分:0)
创建新矢量时,默认情况下它没有元素。您必须使用push_back()插入元素。对于您而言,您没有在向量中之前输入任何元素,而是尝试在该向量的第i个位置插入元素,而该位置仍然不存在。
所以您需要明确定义向量的大小,即
vector<vector<int> > v(10);
现在,向量知道有10个元素。
希望,它会有所帮助。 祝您编码愉快!