在我目前的项目中,我尽最大努力坚持过早优化是万恶之源的原则。但是,现在代码已经过测试,是时候进行优化了。我做了一些分析,结果发现我的代码将近 20% 的时间都花在了一个函数中,在这个函数中它找到了所有可能的孩子,把它们放在一个向量中,然后返回它们。请注意,我正在优化速度,内存限制不是一个因素。
现在函数看起来像这样:
void Board::GetBoardChildren(std::vector<Board> &children)
{
children.reserve(open_columns_.size()); // only reserve max number of children
UpdateOpenColumns();
for (auto i : open_columns_)
{
short position_adding_to = ColumnToPosition(i);
MakeMove(position_adding_to); // make the possible move
children.push_back(*this); // add to vector of children
ReverseMove(); // undo move
}
}
根据分析,我的代码花费了大约 40% 的时间就在children.push_back(*this);
我这样调用函数的行上:
std::vector<Board> current_children;
current_state.GetBoardChildren(current_children);
我在想,由于可能的孩子的最大数量很小(7),只使用一个数组会更好吗?还是我不能做很多事情来优化这个功能?