C++中的迭代器
回答
因爲*it++
意味着後置it
和間接引用的結果(it
原始值),因爲++
結合更緊密(這相當於到*(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)++;
這相當於
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;
}
實現,其中你可以看到,它的操作符之前返回迭代器的值++()完成。
- 1. 異類迭代器的C++迭代器
- 2. C++中的迭代器
- 3. C++迭代器
- 4. C++ - 迭代器迭代器不編譯
- 5. C++容器的迭代器
- 6. LevelDB C迭代器
- 7. C++流迭代器
- 8. C++迭代器類
- 9. 迭代器無故迭代C++
- 10. 迭代器的迭代器
- 11. C++列表的迭代器
- 12. C++向量的迭代器
- 13. C++自己的迭代器
- 14. 迭代器中的迭代器在樹型集合中的迭代器
- 15. C++中的矢量迭代器
- 16. C++中的迭代器類設計
- 17. C++中的矢量迭代器
- 18. 比較C++中的迭代器
- 19. c中的詞典迭代器#
- 20. C++中的迭代器循環
- 21. C++中的泛型迭代器
- 22. 列表中的C++迭代器
- 23. 向量中的C++ const迭代器
- 24. C++中的迭代器和常量interator
- 25. C++流迭代器VS容器迭代器
- 26. C++ STL迭代器接口
- 27. C++迭代器做什麼?
- 28. MovePrevious&MoveNext迭代器在C#
- 29. C#5 ReadAsync和迭代器
- 30. C++讀取txt迭代器
http://en.cppreference.com/w/cpp/language/operator_precedence – chris