C++为每一个,从向量元素拉取

z9gpfhce  于 2023-08-09  发布在  其他
关注(0)|答案(4)|浏览(133)

我试图对攻击向量进行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();
        }
    }
}

nhn9ugyo

nhn9ugyo1#

对于下面的示例,假设您使用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迭代器。

oaxa6hgo

oaxa6hgo2#

这是在C++中循环的方式(11):

for (const auto& attack : m_attack)
    {  
        if (attack->m_num == input)
        {
            attack->makeDamage();
        }
    }

字符串
C++中没有for each。另一种选择是使用std::for_each和一个合适的函子(可以是任何可以用Attack*作为参数调用的东西)。

7cjasjjr

7cjasjjr3#

for each语法在Visual Studio中作为原生c++的扩展受到支持。
msdn中提供的示例

#include <vector>
#include <iostream>

using namespace std;

int main() 
{
  int total = 0;

  vector<int> v(6);
  v[0] = 10; v[1] = 20; v[2] = 30;
  v[3] = 40; v[4] = 50; v[5] = 60;

  for each(int i in v) {
    total += i;
  }

  cout << total << endl;
}

字符串
(在VS 2013中工作)不是可移植的/跨平台的,但给你一个如何使用for each的想法。
标准的替代方案(在其余的答案中提供)适用于任何地方。最好使用它们。

cfh9epnr

cfh9epnr4#

C在其语法中没有for_each循环功能。你必须使用c11或使用模板函数std::for_each

struct Function {
    int input;
    Function(int input): input(input) {}
    void operator()(Attack& attack) {
        if(attack->m_num == input) attack->makeDamage();
    }
};
Function f(input);
std::for_each(m_attack.begin(), m_attack.end(), f);

字符串

相关问题