如何将函数push_back定义为Arc结构?

时间:2015-08-22 22:03:12

标签: c++ struct push-back

我是C ++的新手,我不知道如何将函数push_back定义为我的结构:

struct Arco {

    int i, j;
    Arco () {};
    Arco (const Arco& obj): i(obj.i), j(obj.j) {};
    Arco(int _i, int _j) : i(_i), j(_j) {}   

};

我有一个弧矢量矢量:

vector < vector < Arco > > Df;
Df = vector < vector < Arco > > ( nn, vector < Arco > ( ) );

我希望能够允许命令:

Df[i][j].push_back(Arco(u,v));

我该怎么办?

3 个答案:

答案 0 :(得分:1)

您没有“定义”push_back,而是使用现有的。

首先,将向量推回向量向量,将元素推回到内向量中。

df.push_back(vector<Arco>());
df[0].push_back(Arco(1, 2));

答案 1 :(得分:0)

如下所示

vector<vector<Arco> > Df (nn, vector<Arco>());

//...

for ( std::vector<Arco> &inner : Df ) push_back( Arco( 10, 10 ) );

for ( std::vector<Arco> &inner : Df ) push_back( { 10, 10 } );

for ( std::vector<Arco> &inner : Df ) emplace_back( 10, 10 );

for ( std::vector<vector<Arco> >::size_type i = 0; i < DF.size(); i++ )
{
    DF[i].push_back( Arco( 10, 10 ) );
    //DF[i].push_back( { 10, 10 } );
    //DF[i].emplace_back( 10, 10 );
}

或者

for ( auto it = DF.begin(); it != DF.end(); ++it )
{
    it->push_back( Arco( 10, 10 ) );
    //it->push_back( { 10, 10 } );
    //it->emplace_back( 10, 10 );
}

至于表达

Df[i][j].push_back(Arco(u,v));

然后它是不正确的,因为表达式Df[i][j]Arco类型的对象而不是向量。

答案 2 :(得分:0)

抱歉!

我不能这样做:

for (int i = 0; i < ni; i++) {

  for (int j = 0; j < ni; j++) {

    for (int u = 0; u < nn; u++) {

      for (int v = 0; v < nn; v++) {

        Df[i][j].push_back(Arco(u,v));

      }

    }

  }

}