2017-02-17 14 views
-1

たとえば、ベクトルがあります。ベクトルにはi個のアイテムが含まれています。ベクトルのすべての要素iのすべての位置jをループしたいとします。私は、次のコードでプロシージャを実行するためにネストされたforループを使用しようとしています。C++の文字列ベクトルの文字列要素内のすべての文字をループする

vector<string> strvec; 
strvec.push_back("Dog"); 
strvec.push_back("Cat"); 

for (int i = 0; i < strvec.length; i++) 
{ 
    for (int j = 0; j < strvec[i].length; j++) 
    { 
     strvec[i][j] = 'k'; 
    } 
} 

、このようにループを使用するたびに、上記のコードは、(の先頭からも、ネストされたループ内のコードの前に、エラーメッセージが表示されます:それはそうのように、すべてのKSへのすべての要素を変更しようとしますネストされたループ)。効果的で動作する文字列ベクトルの各要素のすべての文字をループする方法はありますか?

+0

「エラーメッセージ」が表示された場合は、質問に追加してください。 – tadman

+1

'strvec.length'の代わりに' strvec.size() 'を考えてみましょう –

+0

何かは、* compiler *エラーを見ていて、ベクトルを反復して文字列を反復しようとすると、あなたはそれらを一緒に試してください。 – Beta

答えて

1

は参照と範囲ベースforを使用するアプローチです。最初からコンテナを反復処理する必要があるときはいつでも、範囲ベースのforを最初に試してください。それはマニュアルコントロールほど多彩ではありませんが、間違っているのは本当に難しいです。

for (string & str: strvec) 
{ 
    for (char & ch: str) 
    { 
     ch = 'k'; 
    } 
} 
0

std::vectorあなたは、反復のために使用することができますsize機能を持っています。ここ

for (std::size_t i = 0; i < strvec.size(); i++) 
{ 
    for (std::size_t j = 0; j < strvec[i].size(); j++) 
    { 
     strvec[i][j] = 'k'; 
    } 
} 
+0

私が使っているリファレンスで 'length'が' vector'のメンバーとして見えません。しかし、私はあなたの名前を認識し、あなたに遅れていく傾向があります。 –

+0

Vectorは 'length'関数を持たず、' size'を持っています。 – Gambit

+0

あなたは正しいです。編集したコード(私の編集ではない)ははるかに優れています。 –

関連する問題