多维向量

Multi Dimensional vectors

本文关键字:向量      更新时间:2023-10-16

需要一个以一对(int, int(作为元素的2D向量。以下代码给出了运行时的 SIGSEGV。如何解决?

int main()
{
vector< vector<pair<int, int> > >v;  
//vector< vector<pair<int, int> > >v(3), problem is resolved, but how ?

for(int i = 0; i < 3; ++i)
for(int j = 0; j < 3; ++j)
v[i].push_back(make_pair(i, j));
for(int i = 0; i < 3; ++i)
{
cout<<"n";
for(int j = 0; j < 3; ++j)
cout<<"{"<<v[i][j].first<<", "<<v[i][j].second<<"}  ";
}
return 0;
}

一开始,v只包含任何内容,所以 SIGSEGV 如果接收到

v[0].push_back(make_pair(0, 0)); // First loop

如果初始化长度为 3 的v,则v[0]是有效的语句,不会导致分段错误。

如果不使用大小初始化v,则以下代码应该有效。

for(int i = 0; i < 3; ++i){
vector<pair<int,int> > t;
for(int j = 0; j < 3; ++j)
t.push_back(make_pair(i, j));
v.push_back(std::move(t));
}

感谢Zereges对代码的改进

你插错了。

for(int i = 0; i < 3; ++i)
for(int j = 0; j < 3; ++j)
v[i].push_back(make_pair(i, j));

更改插入代码,如下所示以正常工作:

for(int i = 0; i < 3; ++i)
{
vector<pair<int, int>> vctr;
for(int j = 0; j < 3; ++j)
{
vctr.push_back(make_pair(i, j));
}
v.push_back(vctr);
}

创建一个 pair 向量,假设:(VCTR(,然后在 (VCTR( 中插入 pair<<strong>i,j>。 然后将 VCTR 插入矢量 (V(。