2010-10-06 153 views
2

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

所以我的问题是我该如何正确地创建并返回一个矢量向量?

+3

这是第55行 – pm100 2010-10-06 18:00:02

回答

1

它看起来像你试图构建vectorvector<int>只使用vector<int>。无法看到如何声明moves,但基于其他代码,我认为这将工作。

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

看不到的价值在这里使用vectorvector 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) 
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; 
} 

可能还有更多,但那是其中之一。