使用迭代器查找元素的位置

findding the position of elements with iterator

本文关键字:位置 元素 查找 迭代器      更新时间:2023-10-16

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

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

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);
}

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

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;