2017-04-08 35 views
0

如何正確使用stl::map::iterator的指針運算?我可以在STL :: map :: iterator上做指針運算

在下面的示例中,我創建了stl::mapstl::map::iterator並嘗試通過增加迭代器來訪問迭代器第二個鍵。

#include <iostream> 
#include <map> 

using namespace std; 

int main() { 

    map <string, string> peoples; 

    peoples["paul"] = "friend"; 
    peoples["galactus"] = "foe"; 

    map<string, string>::iterator my_iter = ++peoples.begin(); 

    cout << my_iter->first << endl; 

    return 0; 
} 

當使用++peoples.begin();編譯是OK,但如果使用1 + peoples.begin();,出現錯誤。

問題站:如何使用指針算術stl::map::iterator

是否有任何容器有類似的困難,雖然我知道用stl::vector::iterator你可以使用指針算術?

回答

0

我可以做一個指針STL ::地圖上算術:迭代

號你不能這麼做指針算術上的迭代器,因爲迭代器是(一般)不是指針。

如果你看看文檔,你會發現map::iterator是一個雙向迭代器。您還會發現雙向迭代器不支持添加運算符。

您可以通過應用遞增運算符n次找到n迭代器的第th個繼承者。這裏也有標準算法:nextadvance

我知道用stl::vector::iterator你可以使用指針算術?

vector::iterator是一個隨機訪問迭代器。那些支持添加運算符。


PS。原始STL不在名稱空間中,標準庫位於命名空間std中;不是stl

+0

那麼cpp如何將stl :: map :: iterator的++轉換爲++? ,它是最後添加的數字,不是嗎? –

+0

@Café吸血鬼什麼號碼加到底是什麼? – user2079303

+0

不,這是誤會。我問的是'++'是如何最終(在編譯過程結束時)在cpp中翻譯的。我所建議的是,'++'必須產生一個增加迭代器值的數字。 –