2012-04-17 1 views
2

구조체의 벡터에서 작업하고 있습니다. 이런 내가 반복자로이 함수를 호출하는 것을 시도하고있다C++ : vector :: erase가 반복자와 함께 호출되었습니다.

:

vec2.erase (vec2.begin()+iter2); 

그것은 나에게이 오류 전송 :

"no match for 'operator+' in '(+vec2)->std::vector<_Tp, _Alloc>::begin [with _Tp = wordstype, _Alloc = std::allocator<wordstype>]() + iter2'" 

내가 반복자 (또는 다른 매개 변수)를 보낼 수 있습니까? 예인 경우 문제가 무엇입니까?

+3

반복자와 오프셋을 혼동하고 있습니다. – dasblinkenlight

+1

iter2는 어떤 유형입니까? – vladmihaisima

답변

3

iterator to iterator을 추가 할 수 없습니다.

iter2 이미 벡터의 구체적인 장소를 가리키는, 그래서 당신은 쓸 수 있습니다 : 대신

iter2 = vec2.erase(iter2); 

. 그래서 전화가 유효하지

erase(vec2.begin() + 3); 

반복자는 operator+를 선언하지 않는 그러나 :

+0

이 반복자가 가리키는 요소를 지울 때 Iterator가 무효화되므로'erase' 메소드가 새로운 것을 반환하므로 유용 할 수 있습니다. –

+0

대단히 감사합니다! 내 포블렘은 반복자 연산을 잘못 사용했다. 당신은 많은 도움이되었습니다! – adamco

+0

당신을 환영합니다! 감사를 말하는 바람직한 방법은 upvoting하고 답변을 수락합니다. 참조 : http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

2

erase는 반복자와 함께 작동 할 수 있으며 코드는 다음과 같다 : 당신은 또한 할 수

erase(itr2); 

.

0

두 개의 반복자를 함께 추가하려고합니다. 이는 의미가 없습니다.

코드를 게시하고 수행하려는 작업을 설명하십시오.

0

오류 메시지에 따라 설명하는 문제가 std::vector<>::erase 인 것으로 보이지 않습니다.

컴파일러에 문제가있는 표현식은 vec2.begin() + iter2입니다. 분명히 귀하의 경우 iter2은 반복자입니다. vec2.begin() 또한 반복자입니다. 하나의 반복자를 다른 반복자에 추가 할 수 없습니다. 단순히 의미가 없습니다. 따라서 오류.

vec2.begin() + iter2 님이 시도한 것은 무엇입니까? iter2이 실제로 반복자 인 경우 왜 vec2.begin()에 추가하려고합니까?