1

ベクトル内の要素のインデックスを見つけるにはどうすればよいですか? ベクトルのスナップショットに次が含まれていると仮定します。

10 12 15 23 43

今私は数字を挿入したい。

1- 15 を挿入 => 2 を返す (位置)

2- 50 を挿入 => push_back() => 5 を返す (位置)

これは私が書いたものですが、イテレータを整数に変換できません。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> v;
int insertVector(int a);
int main()
{
   int a;
   cout << "enter number: ";
   cin >> a;
   int pos = insertVector(a);
   cout << pos;   // update
   return 0;    
}

int insertVector(int a)
{
   vector<int>::iterator it;
   it = find(v.begin(), v.end(), a);
   if (it == v.end()) {
      v.push_back(a);
      return v.size();
   }
   return it;   // error
}

アップデート:

に変更return it;するreturn *it;と、出力が間違っています。このような:

enter number: 10
1
enter number: 20 
2
enter number: 25
3
enter number: 35
4
enter number: 45  
5
enter number: 5
6
enter number: 25
25   // wrong
4

2 に答える 2

3

insertVectorの戻り値の型はintですが、イテレータを返すこともできます。コードを次のように変更します。

int insertVector(int a)
{
   vector<int>::iterator it;
   vector<int>::iterator begin = v.begin();
   it = find(begin, v.end(), a);
   if (it == v.end()) {
      v.push_back(a);
      return v.size();
   }
   return std::distance(begin, it);
}
于 2013-02-17T07:42:32.450 に答える
1

自分でベクトルを明示的に反復できます: (エレガントさは劣りますが、ベクトルに対して 1 回の反復が必要です)

int position = 0;
for (it = v.begin(); it != v.end(); ++it; ++position) {
     if (*it == a) {
         return position; 
     }
}

v.push_back(a);
return v.size() - 1;
于 2013-02-17T07:47:14.280 に答える