1

这是我使用的枚举类。

enum class PlayerColor {BLACK, BLUE, RED};

这就是我想要创建矢量的方式。基本上,存储一个顶点名称及其颜色。我收到很多错误。

typedef pair<int, PlayerColor> ip;

vector< vector< ip > > vertices;

这就是我想要初始化 2D 向量的方式(在构造函数中)

for(auto i=vertices.begin()+1;i<vertices.end();++i)
    for(auto j=i->begin()+1;j<i->end();++j)
    {
        *(j.first)=c++;   //error
        *(j.second)=PlayerColor::BLACK;  //error
    }

此函数采用两个顶点的名称并在它们之间添加一条边。(否则常规工作正常)

addEdge(vertices[i][j+1].first,vertices[i][j].first); //error

编辑: addEdge函数定义为:

void HexBoard::addEdge(int u, int v)
{
    edge[u].push_back(v);
    edge[v].push_back(u);
}

edge是 :

vector< vector<int> > edge;

它以 C++11 风格初始化为:

edge(vector< vector<int> > (size*size + 1 + 4)),EAST(size*size+1),WEST(size*size+2)

size是一个整数。

4

1 回答 1

2

我看到的唯一错误是在表达式中*(j.first)=c++;*(j.second)=PlayerColor::BLACK; 您需要j像这样取消引用迭代器:

    (*j).first=c++;   //no error
    (*j).second = PlayerColor::BLACK;  //no error

编辑:

其他错误可能是因为您的代码没有像以下行一样正确声明内容:

addEdge(vertices[i][j+1].first,vertices[i][j].first);

如果ij是整数类型,这里没有错误。如果ij是迭代器,那么你会得到一个错误。

于 2013-11-14T13:14:57.437 回答