2016-11-29 1 views
2

文字のベクトルにcharが存在するかどうかを確認しています。私は(charが存在するかどうかをチェック)最初の部分を行っている:ベクトルの文字の位置の取得(C++)

char letter(a); 
string word; 
vector<char>vWord(word.begin(), word.end()); 
if(find(vWord.begin(), vWord.end(), letter) != vWord.end()){}  

しかし、私はどのように位置を取得するには考えています。どんな助けもありがとうございます。

+3

代わりに、代わりにインデックス –

+0

を返す['std :: string :: find'](http://en.cppreference.com/w/cpp/string/basic_string/find)を使うことができます。' int index = std :: find(vWord.begin()、vWord.end()、letter) - vWord.begin(); ' – George

+0

@ KarstenKoop:あなたはそれを答えるべきです。 –

答えて

2

イテレータを保存し、その上にいくつかの数学の操作を行います。

vector<char>::iterator itr = find(vWord.begin(), vWord.end(), letter); 
if(itr != vWord.end()) 
{ 
    int index = itr - vWord.begin(); 
} 

しかしstd::stringが既にfindメソッドを持っていることに注意してください。

1

あなたはほぼあります。あなたは距離を見つけるためにstd::distanceを使用することができますので、あなたはすでに、(findによって返された)その文字を指すイテレータを持っている:

char letter(a); 
string word; 
vector<char>vWord(word.begin(), word.end()); 
auto it = find(vWord.begin(), vWord.end(), letter); 
if (it != vWord.end()) 
{ 
    size_t index = std::distance(vWord.begin(), it); 
} 

(例えばstd::vectorで使用されるものなど)、ランダムアクセスイテレータの場合は、std::distance(a, b)が一定であります-time操作を実行し、b - aを実行して実装します。

サイドノート:std::findとイテレーター操作をstd::stringに直接行うことができます。それはそれ自体完璧なコンテナです。

+0

年齢は '-'と' std :: distance'を使っています。 –

+1

'size_t'ではなく' auto'を使うべきでしょう。これはおそらく問題のシナリオでは問題ではありませんが、 'std :: distance'を使用すると負の数を返すことがあり、iteratorの' difference_type'はおそらく符号付き整数です。 – Xirema

+1

@Xiremaこの場合、 'std :: distance'は負の数を返すことはできません。また、' size_t'以外の型のコンテナへのインデックスを持つことで、独自の問題が発生する可能性があります。 – Angew

関連する問題