イテレータ→添え字

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
Cr
記事: 93
登録日時: 9年前

イテレータ→添え字

#1

投稿記事 by Cr » 8年前

コード:

vector<int> vec;
//入力
vector<int>::iterator ite = find(vec.begin(),vec.end(),5);
のような状態でiteから添え字を取り出すにはどうすればいいのでしょうか?

アバター
tk-xleader
記事: 153
登録日時: 9年前
連絡を取る:

Re: イテレータ→添え字

#2

投稿記事 by tk-xleader » 8年前

std::vector<int>::iterator::difference_type index = ite - vec.begin();

でいいと思います。

beatle
記事: 1280
登録日時: 8年前
住所: 埼玉
連絡を取る:

Re: イテレータ→添え字

#3

投稿記事 by beatle » 8年前

どんなイテレータに対しても同じように書きたい場合は、std::distanceが使えます。beginとの距離を求めるわけです。
vectorのイテレータに限れば、vectorのイテレータはランダムアクセスイテレータですので、beginと引き算することによっても添字を計算することができます。

アバター
tk-xleader
記事: 153
登録日時: 9年前
連絡を取る:

Re: イテレータ→添え字

#4

投稿記事 by tk-xleader » 8年前

やっぱり、こっちのほうがよさそうです。

std::iterator_traits<std::vector<int>::iterator>::difference_type index = ite - vec.begin();

アバター
Cr
記事: 93
登録日時: 9年前

Re: イテレータ→添え字

#5

投稿記事 by Cr » 8年前

>beatleさん
どんなイテレータに対しても同じように書きたい場合は、std::distanceが使えます。beginとの距離を求めるわけです。
うまく行きました!ありがとうございます。
調べたところ返り値はint型のようですね

>tkmakwins15さん
やっぱり、こっちのほうがよさそうです。

std::iterator_traits<std::vector<int>::iterator>::difference_type index = ite - vec.begin();
チャットでも教えていただいてありがとうございます。
::difference_typeを常に取り出せるとは限らない(ポインタとかは無理)
iterator_traits<>に渡せば::difference_typeを常に取り出せる。
だからiterator_traits<>にvector<int>::iteratorを渡してそこから::difference_typeを取り出す。
…っていうことですよね?
まだあやふやですが教えてもらったサイト(http://episteme.wankuma.com/stlprog/index.html)等活用しながら慣れたいと思います。

お二方どうもありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る