#include <vector>
vector<int> v;
vector<int>::iterator it;
for(int i=0; i<10; ++i) v.push_back(i);
it = find(v.begin(), v.end(), 3);
cout << it - v.begin() <<endl;
結果:
3
とりあえずうまく行きそうだが、これってデータを追加・削除するときにbeginのデータがなくなったりしたら順番が全部変わる気がする。試してみよう。erase で 3 の格納されている要素を消してみる。
#include <iostream>
#include <vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> v;
vector<int>::iterator it;
for (int i = 0; i<10; ++i) v.push_back(i);
it = find(v.begin(), v.end(), 3);
//cout << it - v.begin() << endl;
v.erase(it);
it = find(v.begin(), v.end(), 2);
cout << it - v.begin() << endl;
it = find(v.begin(), v.end(), 4);
cout << it - v.begin() << endl;
return 0;
}
2
3
2の入っている要素は変わらないが、4の入っている要素が繰り上がって3になっている。
よって、このアルゴリズムを使う注意点としては、要素をpush_backで追加したときはそれまでの要素のIndexがかわらないが、削除した時は変わってしまうことであろう。注意する。
参考
http://kogecoo.hatenablog.com/entry/20090731/1248994749
0 件のコメント:
コメントを投稿