vector<int> v(1, 1);
it = v.begin();
왜 *it++
에 첫 번째 요소에 +1이 없었습니까?C 반복의 반복자
내가 *it++
는 it
을 후행하고 ++
가 단단한 결합하기 때문에 결과 (it
의 원래 값)를 역 참조하는 것을 의미하기 때문에 내가 년
vector<int> v(1, 1);
it = v.begin();
왜 *it++
에 첫 번째 요소에 +1이 없었습니까?C 반복의 반복자
내가 *it++
는 it
을 후행하고 ++
가 단단한 결합하기 때문에 결과 (it
의 원래 값)를 역 참조하는 것을 의미하기 때문에 내가 년
에 대한 C++
를 사용하지 않은 *it = *it + 1
를 사용할 수 있지만 (이것은 상당의 ~ *(it++)
). 내용을 수정하지 않습니다 *it
. *it
을 증가 시키려면 (*it)++
을 사용하십시오.
아니요. 그것은'it ++ '을 의미하고 결과를 역 참조합니다. 사후 증가의 결과는 반복기가 증가되기 전에 갖는 값입니다. 그리고 이터레이터의 사후 증가는 비효율적 일 수 있습니다. –
그래, 그게 낫다. –
그는 포스트 증가가 먼저 발생한다는 것을 의미하고, deref를 위해 반환되는 결과는 * prior * 요소라는 것을 의미한다. 따라서 비싼 부분. – WhozCraig
++는 *보다 우선 순위가 높습니다.
첫 번째 반복자는 다음 요소를 가리킨 다음 *를 사용하여 참조 해제됩니다. 그러면 왼쪽에 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;
}
이 코드를 컴파일 할 수 없습니다. 내가 뭘 놓치고 있니? ideone.com의 코드는 다음과 같습니다. - http://shar.es/5gmnM – lifebalance
는
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;
}
같은 접두사 연산자를 사용하여 구현됩니다.
http://en.cppreference.com/w/cpp/language/operator_precedence – chris