私は以下の関数を呼び出すときに、入力をベクトルに追加しますが、ベクトルに6つの余分なセルが一貫して追加されます。なぜそれが起こっているすべてのアイデアですか?C++:ベクトルが予期しないデータを取得する
これは、関連する機能である:FUNCを呼び出すメインプログラムの
void seperate_words(string str1, vector<struct wordstype> &vec1)
{
string temp_str;
string::iterator is=str1.begin();
wordstype input_word;
while (is<str1.end())
{
if (((*is)!='-')&&((*is)!='.')&&((*is)!=',')&&((*is)!=';')&&((*is)!='?')&&((*is)!='!')&&((*is)!=':'))
{
temp_str.push_back(*is);
++is;
}
else
{
input_word.word=temp_str;
vec1.push_back(input_word);
is=str1.erase(is);
temp_str.clear();
}
}
input_word.word=temp_str;
vec1.push_back(input_word);
temp_str.clear();
}
関連間隔は次のとおりです。例えば
**while(end_flag==-1){
cin>> temp_string;
end_flag=temp_string.find(end_str);/*indicates whether the end sign is precieved*/
seperate_words(temp_string,words_vecref);/*seperats the input into single words and inserts them into a vector*/
}
int x=words_vec.size();
cout<<x<<" "<<std::endl;
for (vector<struct wordstype>::iterator p_it=words_vec.begin();p_it<words_vec.end();p_it++)
{cout<<(*p_it).word<<" ";}**
:私は通りを歩いてる、私を増やす必要がありますベクトルサイズはわずか6要素で(12ではなく)
出力が期待されます。入力の順に入力からの単語になります。
コードフラグメントの意図が不明なため、あなたの質問は不明です。あなたが持っているエラーを示す**完全**、**短い**サンプルプログラムを提供してください。その短いプログラムをコピーしてあなたの質問に貼り付けてください。期待どおりの出力と、実際に観察した出力を提供してください。詳細はhttp://sscce.orgを参照してください。 –
あなたが期待している以上に6つの要素があることを意味しますか?もしそうなら、いくつかの入力と出力の例を掲載することができます(そして、あなたが見ているものを再現できるように、できれば短いコンパイル可能なプログラムが望ましいでしょうか)。あるいは、 'vec1.capacity()'が 'vec1.size()'よりも大きいということですか?これは 'push_back()'を使うと予想されます。ベクトルは、必要な再配分の数を減らすために倍率によって増加します。 –
私はちょうどあなたの更新を見ました。私はすでに述べたこと以外は何の問題も見ません。 words_vecとwords_vecrefが同じであることは確かですか?whileループではwords_vecrefを使用し、最後にwords_vecを使用します。 – BertR