2013-10-18 19 views
8

std::vectorの文字列を見つけるのに、stringタイプの文字列を使用しています。しかし、どのように特定の要素の位置を返すのですか?ベクトル<string> :: iterator - 要素の位置を見つける方法

コード:

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

出力:

FOUND AT : r

予想される出力:

FOUND AT : 9

答えて

21

あなたはそのためstd::distanceを使用することができます。以下の

auto pos = it - vec.begin(); 
+0

ありがとうございました!私のベクトルに '1000要素'が含まれていて、 'find'を使うと速くなるでしょうか、何らかの' pointer to array'を使う必要があるのでしょうか? – user2754070

+0

@ user2754070あなたはそれを測定する必要がありますが、最適化されたビルドでは 'find'より速くなるとは思っていません。 – juanchopanza

3

用途:

if(it != vec.end()) 
    std::cout<< "Found At :" << (it-vec.begin()) ; 
2
#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; 
+1

いくつかの説明が役に立ちます – Anton

0

使用このステートメント

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

std::vector::iteratorために、あなたはまた、算術演算を使用することができます:

it = find(vec.begin(), vec.end(), "r") - vec.begin(); 
関連する問題