每个 C++,从 vector 元素中提取

标签 c++ for-loop vector each

我正在尝试对攻击 vector 进行 foreach,每次攻击都有一个唯一 ID,例如 1-3。

类方法接受1-3的键盘输入。

我正在尝试使用 foreach 来遍历我在 m_attack 中的元素,以查看数字是否匹配,如果匹配...做点什么。

我看到的问题是这样的:

a'for each' statement cannot operate on an expression of type "std::vector<Attack

我是不是完全错了,我有 C# 经验并且是我的基础,任何帮助将不胜感激。

我的代码如下:

在标题中

vector<Attack> m_attack;

在类里面

int Player::useAttack (int input)
{

    for each (Attack* attack in m_attack) // Problem part
    {  
        //Psuedo for following action
        if (attack->m_num == input)
        {
            //For the found attack, do it's damage
            attack->makeDamage();
        }
    }
}

最佳答案

接下来的示例假设您使用 C++11。 基于范围的 for 循环示例:

for (auto &attack : m_attack) // access by reference to avoid copying
{  
    if (attack.m_num == input)
    {
        attack.makeDamage();
    }
}

您应该根据 makeDamage() 的行为使用 const auto &attack

您可以使用标准库中的 std::for_each + lambdas:

std::for_each(m_attack.begin(), m_attack.end(),
        [](Attack * attack)
        {
            if (attack->m_num == input)
            {
                attack->makeDamage();
            }
        }
);

如果你不习惯使用 std::for_each,你可以使用迭代器循环 m_attack:

for (auto attack = m_attack.begin(); attack != m_attack.end(); ++attack)
{  
    if (attack->m_num == input)
    {
        attack->makeDamage();
    }
}

使用 m_attack.cbegin()m_attack.cend() 获取 const 迭代器。

关于每个 C++,从 vector 元素中提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15027282/

相关文章:

c++ - vector 上的迭代不调用函数

c++ - 如何迭代(在类之外)一个私有(private)成员,它是一个 vector<unique_ptr<T>>

python - '全局名称 <同一 namespace 中的函数> 未定义' - 为什么会发生这种情况?

c++ - XLib:调用 XSetWMProtocols 后 Windows 管理器不发送客户端消息

python - Python 中的 FOR 循环中是否有 'skip-range' 技术?

c# - 检测到无法访问的代码,if 语句中的变量

bash - 循环时避免展开 : for x in $foo

c++ - std vector 保存指针和变量地址。清理?

c++ - Boost 编译在 boost/move/unique_ptr.hpp 中失败

c++ - static_assert 和类模板