我做了一个拼图游戏。它有一个 Board 对象,该对象包含卡片对象的 vector 并将事件委托(delegate)给它们。董事会事件处理有以下代码:
// Counting logic-driving card states
int cardFaceUpCounter = 0;
std::vector<Card*> faceUpCards(2);
// Checking for logic-driving card states
for (auto& card : this->boardMatrix)
{
if (this->isCardInAnim(&card))
{
return;
}
if (this->isCardFaceUp(&card))
{
++cardFaceUpCounter;
faceUpCards[cardFaceUpCounter - 1] = &card;
}
}
我刚刚在 Pluralsight 上学习了 Kate Gregory 的 Beautiful C++。 她认为我们应该避免写循环,应该尽可能使用STL算法头。 我发现她的论点和方法非常有说服力,因此我试图重构我最新的宠物项目以反射(reflect)她的教义。
上面的示例是我无法理解如何使用 STL 算法来更好地传达意图和保持性能的地方 - 单个循环而不是两个或三个循环,尽管隐藏在算法调用中。
第二个问题是,如果使用 STL 算法无法实现单循环效率,您是否仍会出于可读性考虑而更喜欢这种方法。
最佳答案
这是我的想法的一个例子。
int cardFaceUpCounter = 0;
std::vector<Card*> faceUpCards(2);
if (std::any_of(boardMatrix.begin(), boardMatrix.end(), [&](auto& card) {
if (isCardFaceUp(&card))
faceUpCards[cardFaceUpCounter++] = &card;
return isCardInAnim(&card);
})) return;
关于c++ - 在拼贴游戏逻辑中使用 STL 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49847866/