設的特定位置,我有一個如何獲得迭代器的矢量
std::vector<int> v
//and ...
for(int i =0;i<100;++i)
v.push_back(i);
現在我想一個迭代,我們說的向量的10元。
而不做以下辦法
std::vector<int>::iterator vi;
vi = v.begin();
for(int i = 0;i<10;i++)
++vi;
,因爲這會破壞具有用於矢量隨機訪問迭代的優點。
設的特定位置,我有一個如何獲得迭代器的矢量
std::vector<int> v
//and ...
for(int i =0;i<100;++i)
v.push_back(i);
現在我想一個迭代,我們說的向量的10元。
而不做以下辦法
std::vector<int>::iterator vi;
vi = v.begin();
for(int i = 0;i<10;i++)
++vi;
,因爲這會破壞具有用於矢量隨機訪問迭代的優點。
只需在迭代器中添加10即可。他們的目的是「感覺」像指針。
謝謝..這是有幫助的 –
你不想加9嗎? 將0移動添加到第1個元素, 將1移動添加到第2個元素, ... 將n-1移動添加到第n個元素。 – Shillard
這是光滑的。 :-) –
這將任何隨機訪問迭代器正常工作,比如一個來自vector
或deque
:
std::vector<int>::iterator iter = v.begin() + 10;
如果你想一個解決方案,適用於任何類型的迭代器不起作用,使用next
:
std::vector<int>::iterator iter = std::next(v.begin(), 10);
或者,如果你使用的不是C++ 11的實現,advance
:
std::vector<int>::iterator iter = v.begin();
std::advance(iter, 10);
謝謝...現在只需要爲我添加10件作品。但我會記下這個進展。 –
我寧願std :: advance(),因爲它適用於任何迭代器;這樣你就不會被綁定到特定的容器。 –
@Matt:很可能,如果你的算法需要第n個元素的訪問,那麼無論如何,除了隨機訪問迭代器以外的任何東西都是無用的低效率;所以使用'operator +'而不是'std :: advance'實際上會更好,並且會得到錯誤的迭代器類型的編譯器錯誤。 – ildjarn
[C++ STL向量:從索引獲取迭代器?](http://stackoverflow.com/questions/671423/c-stl-vectors-get-iterator-from-index) –