2013-08-02 53 views
3

有2個迭代器集合相同類型的:如何使一個迭代器指向與C++集中的另一個元素相同的元素?

typename TFunction <T>::Type ::const_iterator i1 = f1.begin(); 
    typename TFunction <T>::Type ::const_iterator i2 = f2.begin(); 

後幾個步驟I1點到具有索引= index1之間f1的一些元件(它可能是未知的)。我需要將第二個迭代器i2設置爲具有等於index1的索引f2的元素...

這可以在沒有將索引i1轉換爲索引的情況下完成嗎?

+0

你在類型之間有一個小的空間有點混淆我 – Antonio

+0

查找索引:http://stackoverflow.com/questions/1796503/index-or-position-in-stdset,得到索引:http://stackoverflow.com/questions/8907435/get-element-from - 任意指數套裝 –

回答

5

使用std::advance爲:

std::advance(it2, index1); //increments it2 index1 times! 

完成!

如果你不知道的index1值,那麼你可以隨時使用當前it1爲計算它:

auto index1 = std::distance(f1.begin(), it1); 

:-)


注意std::advance回報void所以你不能寫這個:

fun(f2.begin(), std::advance(it2, index1)); //error 

相反,如果你要這樣寫:

std::advance(it2, index1); //first advance 
fun(f2.begin(), it2);  //then use it 

因此,爲了減輕這種用法,std::next被添加在C++ 11:

fun(f2.begin(), std::next(f2.begin(), index1)); //ok, don't even need it2! 

順便說一句,在C++ 11 ,您可以使用auto而不是typename thingy:

auto it1 = f1.cbegin(); //cbegin() returns const_iterator 
auto it2 = f2.cbegin(); //cbegin() returns const_iterator 

希望有所幫助。

+0

謝謝。假設index1是未知的;我們不想使用std :: distance來計算它。 C++ 03中沒有任何方法,沒有將index1轉換爲i1嗎? – justik

+0

您還可以將'index1'計算爲'auto index1 = std :: distance(f1.begin(),i1);'。還編輯了答案。 – Nawaz

+0

哦,我意識到我寫了'it1'和'it2'而不是'i1'和'i2'。迭代器變量通常在C++中被寫爲'it'。 – Nawaz

0

使用std::advance(i2,index1)提前i2

+0

鑑於問題的具體情況,請考慮在此提供更多的上下文 – Strawberry

1

我不清楚你的指數是什麼,但如果你已經搬到i1可以使用std::distance,看看有多少通過,然後使用std::advance

std::advance(i2, std::distance(f1.begin(), i1)); 
相關問題