c++ - 在拼贴游戏逻辑中使用 STL 算法

标签 c++ algorithm c++11

我做了一个拼图游戏。它有一个 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/

相关文章:

c++ - 计算文件中每个字母的出现次数?

algorithm - DPLL算法定义

c++ - 无法在 OpenGL 上使用不同的 VAO 渲染不同的网格

algorithm - 按此向量中映射的成员对对象向量进行排序

c++ - 覆盖私有(private)函数

c++ - 通过不可复制的类

algorithm - Karatsuba 算法对比 "*"运营商?

c++ - 如何将 ifstream 返回到刚刚在 C++ 中读取的行的开头?

c++ - aio_write() 总是失败并出现错误 EINVAL

c++ - : std::length_error at memory location 0x00CFEC24异常