2017-04-08 6 views
0

stl::map::iteratorのポインタ演算を正しく使うにはどうしたらいいですか?STL :: map :: iteratorでポインタ演算を行うことができます

私はstl::mapstl::map::iteratorを作成し、イテレータを増やしてイテレータの2番目のキーにアクセスしようとします。

#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を見つけることができます。これには標準的なアルゴリズムもあります:nextadvanceです。

私はstl::vector::iteratorでポインタ演算を使用できることを知っていますか?

vector::iteratorはランダムアクセスイテレータです。それらは加算演算子をサポートします。


PS。元のSTLは名前空間になく、標準ライブラリは名前空間stdにあります。 stlではありません。

+0

したがって、この++をstl :: map :: iteratorに変換する方法は?それは最後に追加された番号ですね。 –

+0

@CaféVampire何の最後に何番号が追加されますか? – user2079303

+0

それは誤解ではありません。私は「++」が最終的に(コンパイルプロセスの終わりに)どのようにcpp内で翻訳されたのかを尋ねています。私が示唆したことは、「++」はイテレータの価値を高める数値になる必要があるということです。 –

関連する問題