イテレータ→添え字
- tk-xleader
- 記事: 158
- 登録日時: 13年前
- 連絡を取る:
Re: イテレータ→添え字
std::vector<int>::iterator::difference_type index = ite - vec.begin();
でいいと思います。
でいいと思います。
Re: イテレータ→添え字
どんなイテレータに対しても同じように書きたい場合は、std::distanceが使えます。beginとの距離を求めるわけです。
vectorのイテレータに限れば、vectorのイテレータはランダムアクセスイテレータですので、beginと引き算することによっても添字を計算することができます。
vectorのイテレータに限れば、vectorのイテレータはランダムアクセスイテレータですので、beginと引き算することによっても添字を計算することができます。
- tk-xleader
- 記事: 158
- 登録日時: 13年前
- 連絡を取る:
Re: イテレータ→添え字
やっぱり、こっちのほうがよさそうです。
std::iterator_traits<std::vector<int>::iterator>::difference_type index = ite - vec.begin();
std::iterator_traits<std::vector<int>::iterator>::difference_type index = ite - vec.begin();
Re: イテレータ→添え字
>beatleさん
調べたところ返り値はint型のようですね
>tkmakwins15さん
::difference_typeを常に取り出せるとは限らない(ポインタとかは無理)
iterator_traits<>に渡せば::difference_typeを常に取り出せる。
だからiterator_traits<>にvector<int>::iteratorを渡してそこから::difference_typeを取り出す。
…っていうことですよね?
まだあやふやですが教えてもらったサイト(http://episteme.wankuma.com/stlprog/index.html)等活用しながら慣れたいと思います。
お二方どうもありがとうございました。
うまく行きました!ありがとうございます。どんなイテレータに対しても同じように書きたい場合は、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)等活用しながら慣れたいと思います。
お二方どうもありがとうございました。