C ++矢量矢量

时间:2010-10-06 17:56:20

标签: c++ vector

我正在尝试编写一个程序,该程序使用基类来定义解决简单问题的算法。我使用一个整数向量作为“游戏板”。我的问题是如何创建一个返回游戏板矢量的函数get_moves?

以下是我对该函数的代码:

std::vector< <std::vector<int> > takeaway::generateMoves( std::vector<int> currBoard ) {


    if( currBoard[0] == 1 || currBoard[0] == 2 ) {
       moves.push_back( 1 );
    }
    else if( currBoard[0] == 3 ) {
       moves.push_back( 2 );
    }
    else if( currBoard[0] == 4 ) {
       moves.push_back( 3 );
    }
    else {
      moves.push_back( 1 );
      moves.push_back( 2 );
      moves.push_back( 3 );
    }

    std::vector< <std::vector <int > > toReturn( moves );

     for( int i = 0; i < moves.size(); i++ ) {

      std::cout << "MOVES: " << moves[i] << std::endl;
    }

  return toReturn;

我得到的错误是:

takeaway.cpp:55:错误:模板参数1无效 takeaway.cpp:55:错误:模板参数2无效

所以我的问题是如何正确创建和返回向量矢量?

2 个答案:

答案 0 :(得分:5)

你的模板声明中有太多了。

std::vector< std::vector<int> > takeaway::generateMoves( std::vector<int> currBoard ) 
{

    if( currBoard[0] == 1 || currBoard[0] == 2 ) {
       moves.push_back( 1 );
    }
    else if( currBoard[0] == 3 ) {
       moves.push_back( 2 );
    }
    else if( currBoard[0] == 4 ) {
       moves.push_back( 3 );
    }
    else {
      moves.push_back( 1 );
      moves.push_back( 2 );
      moves.push_back( 3 );
    }

    std::vector< std::vector<int> > toReturn;
    toReturn.push_back( moves );

     for( int i = 0; i < moves.size(); i++ ) {

      std::cout << "MOVES: " << moves[i] << std::endl;
    }

    return toReturn;
}

可能会有更多,但这是其中之一。

答案 1 :(得分:1)

您似乎只想使用vector来构建vector<int>的{​​{1}}。无法看到如何声明vector<int>,但基于其余代码,我认为这将有效。

moves

在这里看不到使用std::vector<std::vector <int > > toReturn; toReturn.push_back(moves); vector的价值,但这可能是部分样本。

另外 - 通过引用而不是按值传递板会更有效,因为这样可以避免复制整个事物。你没有改变它,所以vector引用更好。

const

按值返回(即向量&lt;向量作为返回值)可能正常,因为此代码可能会进行优化,以避免根据NRVO获取std::vector< std::vector<int> > takeaway::generateMoves( const std::vector<int>& currBoard ) 的副本。

另一种方法是将非const引用传递给所需的结构,该结构在进入时应为空以匹配当前逻辑:

toReturn