C++ 多维向量
需要一个2D向量,其中一对(int,int)作为元素。下面的代码在运行时给出了SIGSEGV。如何解决它C++ 多维向量,c++,vector,stl,C++,Vector,Stl,需要一个2D向量,其中一对(int,int)作为元素。下面的代码在运行时给出了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(in
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;
}
intmain()
{
向量v;
//向量v(3),问题解决了,但如何解决?
对于(int i=0;i<3;++i)
对于(int j=0;j<3;++j)
v[i]。推回(形成(i,j)对);
对于(int i=0;i<3;++i)
{
cout在开始时,v
完全不包含任何内容,因此如果在
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));
}
for(int i=0;i<3;++i){
向量t;
对于(int j=0;j<3;++j)
t、 向后推(形成一对(i,j));
v、 推回(标准::移动(t));
}
感谢Zereges对代码的改进
你插错了
for(int i=0;i<3;++i)
对于(int j=0;j<3;++j)
v[i]。推回(形成(i,j)对);
如下图所示更改插入代码以正常工作:
for(int i=0;i<3;++i)
{
向量vctr;
对于(int j=0;j<3;++j)
{
vctr.推回(形成成对(i,j));
}
v、 推回(vctr);
}
创建一个pair向量,比如:(vctr),然后将pair插入(vctr)。
然后将vctr插入向量(v)
“2D向量”只是向量。弄清楚如何使用向量,你就会知道如何使用“2D向量”。或“3D”。或更多。看看v(3)的实际含义。v.push_back(std::move(t))
@Zereges好吧,复制不会太过冗余,只有3*3=9的大小。
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);
}