vectores una sumar suma programacion multiplicar matriz matrices llenar elementos ejemplos como arreglo c++ for-loop vector each

una - sumar elementos de un vector c++



C++ para cada uno, extrayendo elementos del vector (4)

Así es como se haría en un ciclo en C ++ (11):

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

No hay for each en C ++. Otra opción es usar std::for_each con un functor adecuado (esto podría ser cualquier cosa que se pueda llamar con un Attack* como argumento).

Estoy tratando de hacer un foreach en un vector de ataques, cada ataque tiene una ID única , digamos, 1-3.

El método de clase toma la entrada de teclado de 1-3.

Estoy tratando de utilizar un foreach para ejecutar mis elementos en m_attack para ver si el número coincide, si lo hace ... hacer algo.

El problema que estoy viendo es esto:

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

Estoy haciendo esto completamente mal, tengo experiencia C # y es algo de lo que estoy basando esto, cualquier ayuda sería apreciada.

Mi código es el siguiente:

En encabezado

vector<Attack> m_attack;

En la clase

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 ++ no tiene la función for_each loop en su sintaxis. Tienes que usar c ++ 11 o usar la función de plantilla 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);


El for each sintaxis se admite como una extensión de c ++ nativo en Visual Studio.

El ejemplo proporcionado en 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; }

(funciona en VS2013) no es portátil / multiplataforma, pero te da una idea de cómo usarlo for each .

Las alternativas estándar (proporcionadas en el resto de las respuestas) se aplican en todas partes. Y sería mejor usar esos.


Para los ejemplos siguientes se supone que usa C ++ 11. Ejemplo con bucles basados ​​en rangos:

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

Deberías usar const auto &attack dependiendo del comportamiento de makeDamage() .

Puede usar std::for_each desde la biblioteca estándar + lambdas:

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

Si no se siente cómodo al usar std::for_each , puede recorrer repetidamente m_attack utilizando iteradores:

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

Utilice m_attack.cbegin() y m_attack.cend() para obtener iteradores const .