vectorのイテレータから配列の添え字を取り出す

 タイトルの通りなのですが、C++STLvectorをいじっている時、
イテレータvectorのどの要素(何番目)かを知りたいときがあると思います。
たとえば要素番号に何らかの意味を持たせていたりする場合です。
それ自体があまりいいやり方ではない気がしますが、それは置いておきましょう。


 普通に++itrとかで直にイテレータをまわしている時は、
なんかカウンタ変数みたいなのを別個にインクリメントすればいいかもしれませんが、
findなどのアルゴリズムで返ってきたイテレータに対して要素番号が欲しいときはどうすればよいでしょうか?


 返ってきたイテレータとbegin()で取得したイテレータの引き算で取得できます。

vector<int> v;
vector<int>::iterator itr;

for(int i=0; i<10; ++i) v.push_back(i);

itr = find(v.begin(), v.end(), 3);

cout << itr - v.begin() <<endl;


これは知らなかった。


僕「イテレータから添え字番号ってどうやって取得できますか?
師匠「え?できないよ。」
僕「やっぱりかー。こまったなー。」
師匠「うーん、begin()と引き算してみれば。知らないけど」
僕(やってみる)「げ、できましたよ!」
師匠「うそ!できるんだ!」


なお、他のコンテナだと駄目だと思います。やってみてないけど。