2012-01-18 93 views
8

我有一組類型set<int>,我想獲得一個迭代器到某個不是開始的位置。從集合中的任意索引獲取元素

我做了以下內容:

set<int>::iterator it = myset.begin() + 5; 

我很好奇,爲什麼這是不工作的,什麼是獲得一個迭代器,我想它的正確方法。

+3

C和C++不是同一種語言。 – 2012-01-18 08:59:37

回答

17

myset.begin() + 5;只適用於隨機訪問迭代器,其中std::set的迭代器不是。

對於輸入的迭代器,還有的功能std::advance

set<int>::iterator it = myset.begin(); 
std::advance(it, 5); // now it is advanced by five 

在C++ 11,還有也std::next這是類似的,但不改變它的參數:

auto it = std::next(myset.begin(), 5); 

std::next需要前向迭代器。但由於std::set<int>::iterator是雙向迭代器,因此advancenext都可以使用。