Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 多维向量_C++_Vector_Stl - Fatal编程技术网

C++ 多维向量

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

需要一个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(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);
    }