1

如何找到向量中元素的索引?假设向量的快照包含

10 12 15 23 43

现在我想插入一个数字。

1-插入15 =>返回2(位置)

2- 插入 50 => push_back() => return 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

您可以自己显式迭代向量:(不太优雅,但需要对向量进行一次迭代)

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 回答