C++矢量向量
问题描述:
我正在尝试编写一个程序,该程序使用基类来定义解决简单问题的算法。我使用一个整数向量作为'游戏板'。我的问题是如何创建一个返回游戏板矢量的函数get_moves?C++矢量向量
这里是我对函数的代码:
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无效
所以我的问题是我该如何正确地创建并返回一个矢量向量?
答
它看起来像你试图构建vector
vector<int>
只使用vector<int>
。无法看到如何声明moves
,但基于其他代码,我认为这将工作。
std::vector<std::vector <int > > toReturn;
toReturn.push_back(moves);
看不到的价值在这里使用vector
的vector
S,但也许这是部分样品。
另外 - 通过引用而不是按值传递会更有效,因为这样可以避免整个事情被复制。你没有改变它,所以const
参考更好。
std::vector< std::vector<int> > takeaway::generateMoves(
const std::vector<int>& currBoard)
按值返回(即矢量<向量作为您的返回值)可能是OK,因为这个代码可能会被优化,以避免根据NRVO采取的toReturn
副本。
另一种方法是在一个非const引用到所需的结构,这应该是空在进入通以适应当前的逻辑:
void takeaway::generateMoves(
const std::vector<int>& currBoard, std::vector< std::vector<int> >& toReturn)
答
你有太多的<就在你的模板声明。
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;
}
可能还有更多,但那是其中之一。
这是第55行 – pm100 2010-10-06 18:00:02