각각에 대한 C ++, 벡터 요소에서 가져 오기
나는 공격 벡터에 대해 foreach를 시도하고 있으며 각 공격에는 1-3과 같은 고유 ID가 있습니다.
클래스 메서드는 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();
}
}
const auto &attack
의 동작에 따라 사용해야합니다 makeDamage()
.
std::for_each
표준 라이브러리 + 람다에서 사용할 수 있습니다 .
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 ++ (11)의 루프에서 수행되는 방법입니다.
for (const auto& attack : m_attack)
{
if (attack->m_num == input)
{
attack->makeDamage();
}
}
for each
C ++ 에는 없습니다 . 또 다른 옵션은 적절한 펑터와 함께 std :: for_each를 사용하는 것입니다 (이는 Attack*
as 인자 로 호출 할 수있는 모든 것이 될 수 있습니다 ).
이 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;
}
(VS2013에서 작동)은 이식 가능 / 교차 플랫폼이 아니지만 for each
.
표준 대안 (나머지 답변에서 제공됨)은 모든 곳에 적용됩니다. 그리고 그것들을 사용하는 것이 가장 좋습니다.
C++ does not have the for_each
loop feature in its syntax. You have to use c++11 or use the template function 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);
ReferenceURL : https://stackoverflow.com/questions/15027282/c-for-each-pulling-from-vector-elements
'program story' 카테고리의 다른 글
보기를 뒤로 보내는 방법은 무엇입니까? (0) | 2021.01.05 |
---|---|
CMTime 초 출력 (0) | 2021.01.05 |
번들 명령을 찾을 수 없음 Mac (0) | 2021.01.05 |
'automaticallyAdjustsScrollViewInsets'는 iOS 11.0에서 더 이상 사용되지 않습니다. (0) | 2021.01.05 |
jQuery를 사용하여 버튼 값 검색 (0) | 2021.01.05 |