我知道之前有这样一个问题,特别是在这个网站上,但我看到了数百个答案,但这些答案并没有满足我的需要。我对提出这样一般性问题表示歉意。
我需要一个树实现来为我正在用C ++实现的国际象棋游戏生成可能的板状态。所以这是要求:
以下是我要存储的数据:
// A tree's contents will only be composed of this variable
ChessModelConstants::ChessPiece m_gameBoard[8][8];
typedef char PieceType, PieceColor;
//Variable is as follows
struct ChessPiece {
// A simple Constructor with default values
ChessPiece(PieceType pieceType = ChessModelConstants::TYPE_EMPTY,
PieceColor pieceColor = ChessModelConstants::COLOR_WHITE) :
m_pieceType(pieceType), m_pieceColor(pieceColor)
{
}
// Members
PieceType m_pieceType;
PieceColor m_pieceColor;
};
我在哪里可以找到/实现这样的树?我想提一下Boost目前不适合我。任何STL或强大的手动实现都可以。提前谢谢。
PS:我找到了我正在调查的this网站。
答案 0 :(得分:0)
如果我理解正确,你需要这样的东西吗?
template<typename T>
class TreeItem
{
public:
TreeItem<T> (T data)
: m_data (data)
{
}
TreeItem<T> (const TreeItem& item)
: m_data (item.m_data)
{
m_children = item.m_children;
}
TreeItem<T>& AddChild (TreeItem<T>& item)
{
m_children.push_back (item);
return *m_children.rbegin();
}
TreeItem<T>& AddChild (T data)
{
m_children.push_back (TreeItem<T>(data));
return *m_children.rbegin();
}
std::vector<TreeItem<T> >& GetChildren ()
{
return m_children;
}
T& GetData()
{
return m_data;
}
private:
T m_data;
std::vector<TreeItem<T> > m_children;
};
// usage example
ChessBoard emptyBoard;
TreeItem<ChessBoard> root (emptyBoard);
root.AddChild (emptyBoard).AddChild(emptyBoard);