多维向量

时间:2017-07-30 07:46:00

标签: c++ vector stl

需要一个带有一对(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;
}

2 个答案:

答案 0 :(得分:1)

一开始,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 进行代码改进

答案 1 :(得分:0)

  

你插错了。

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);
    }
  

创建一个对的向量,让我们说:(vctr),然后插入对&lt; i,j &gt;在(vctr)。   然后将vctr插入vector(v)。