web-dev-qa-db-fra.com

vector <string> :: iterator - Comment trouver la position d'un élément

J'utilise le code suivant pour trouver une chaîne dans un type std::vector de string. Mais comment retourner la position d'un élément particulier?

Code:

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    vector<string> vec;
    vector<string>::iterator it;

    vec.Push_back("H");
    vec.Push_back("i");
    vec.Push_back("g");
    vec.Push_back("h");
    vec.Push_back("l");
    vec.Push_back("a");
    vec.Push_back("n");
    vec.Push_back("d");
    vec.Push_back("e");
    vec.Push_back("r");

    it=find(vec.begin(),vec.end(),"r");
    //it++;

    if(it!=vec.end()){
        cout<<"FOUND AT : "<<*it<<endl;
    }
    else{
        cout<<"NOT FOUND"<<endl;
    }
    return 0;
}

Sortie:

FOUND AT : r

Production attendue:

FOUND AT : 9

11
user2754070

Vous pouvez utiliser std::distance pour cela:

auto pos = std::distance(vec.begin(), it);

Pour un std::vector::iterator, vous pouvez également utiliser l'arithmétique:

auto pos = it - vec.begin();
23
juanchopanza
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    vector<string> vec;
    vector<string>::iterator it;

    vec.Push_back("H");
    vec.Push_back("i");
    vec.Push_back("g");
    vec.Push_back("h");
    vec.Push_back("l");
    vec.Push_back("a");
    vec.Push_back("n");
    vec.Push_back("d");
    vec.Push_back("e");
    vec.Push_back("r");

    it=find(vec.begin(),vec.end(),"a");
    //it++;
    int pos = distance(vec.begin(), it);

    if(it!=vec.end()){
        cout<<"FOUND  "<< *it<<"  at position: "<<pos<<endl;
    }
    else{
        cout<<"NOT FOUND"<<endl;
    }
    return 0;
3
Pingakshya Goswami

Utilisez ce qui suit:

if(it != vec.end())
   std::cout<< "Found At :" <<  (it-vec.begin())  ;
3
P0W

Utilisez cette déclaration:

it = find(vec.begin(), vec.end(), "r") - vec.begin();
0
keep_smiling