vector<int> v(1, 1);
it = v.begin();
Почему *it++
не добавили один на первый элемент?Итераторы в C++
Хотя можно использовать *it = *it + 1
Я не использовать C++
в течение многих лет
vector<int> v(1, 1);
it = v.begin();
Почему *it++
не добавили один на первый элемент?Итераторы в C++
Хотя можно использовать *it = *it + 1
Я не использовать C++
в течение многих лет
Поскольку *it++
означает postincrement it
и разыменовать результат (исходное значение it
), так как ++
связывает крепче (это эквивалентно до *(it++)
). Он не изменяет содержимое на *it
. Если вы хотите увеличить *it
, используйте (*it)++
.
Нет, это не так. Это означает 'it ++' и разыгрывает результат. Результатом пошагового приращения является значение, которое итератор перед тем, как увеличить. И пост-приращение на итераторах может быть неэффективным. –
Хорошо, это лучше –
, что он имеет в виду, это срабатывание post increment, а результат, возвращаемый для deref, - это элемент * before *. Таким образом, дорогая часть. – 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)++;
что эквивалентно
int x = *it;
it = ++it; // prefix
это не не увеличивается, пока точка с запятой (потому что это постфиксный оператор). 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