我正在尝试编写一个程序,该程序使用基类来定义解决简单问题的算法。我使用一个整数向量作为“游戏板”。我的问题是如何创建一个返回游戏板矢量的函数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无效
所以我的问题是如何正确创建和返回向量矢量?
答案 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