2012-09-28 4 views
1
vector<int> v(1, 1); 
it = v.begin(); 

*it++에 첫 번째 요소에 +1이 없었습니까?C 반복의 반복자

내가 *it++it을 후행하고 ++가 단단한 결합하기 때문에 결과 (it의 원래 값)를 역 참조하는 것을 의미하기 때문에 내가 년

+2

http://en.cppreference.com/w/cpp/language/operator_precedence – chris

답변

0

에 대한 C++를 사용하지 않은 *it = *it + 1

를 사용할 수 있지만 (이것은 상당의 ~ *(it++)). 내용을 수정하지 않습니다 *it. *it을 증가 시키려면 (*it)++을 사용하십시오.

+2

아니요. 그것은'it ++ '을 의미하고 결과를 역 참조합니다. 사후 증가의 결과는 반복기가 증가되기 전에 갖는 값입니다. 그리고 이터레이터의 사후 증가는 비효율적 일 수 있습니다. –

+0

그래, 그게 낫다. –

+0

그는 포스트 증가가 먼저 발생한다는 것을 의미하고, deref를 위해 반환되는 결과는 * prior * 요소라는 것을 의미한다. 따라서 비싼 부분. – WhozCraig

4

++는 *보다 우선 순위가 높습니다.

첫 번째 반복자는 다음 요소를 가리킨 다음 *를 사용하여 참조 해제됩니다. 그러면 왼쪽에 v [1]을 수집 할 수 있습니다.

아래 코드를 사용하여 문제를 해결하십시오. 다른 설명했듯이

#include<iostream> 

using namespace std; 

int main() 
{ 
vector<int> v(2, 1); 
vector<int>::iterator it; 
it = v.begin(); 
(*it)++; //instead of *it++; 

cout << v[0] << v[1] << endl; 
} 
+0

이 코드를 컴파일 할 수 없습니다. 내가 뭘 놓치고 있니? ideone.com의 코드는 다음과 같습니다. - http://shar.es/5gmnM – lifebalance

0

int x = *it++; 

후까지 증가되지

int x = *it; 
it = ++it; // prefix 

그것을 등가 인

int x = (*it)++; 

동등 세미콜론 (접미사 연산자이기 때문에). 당신이() ++ 연산자 앞에 반복자의 값을 반환 할 것을 볼 수있는 곳 posfix ++ 연산자는 보통이

template<typename T> vector<T>::iterator vector<typename T>::iterator::operator++(int) 
{ 
    vector<T>::iterator tmp(*this); 
    ++(*this); // call prefix operator++() 
    return tmp; 
} 

같은 접두사 연산자를 사용하여 구현됩니다.