2012-04-18 4 views
-1

私は構造体の空のベクトルを使用しています。C++:vectorof structs

今、structメンバーの1つにデータを入力しているときに、ベクターのサイズが変更されますか?

はいの場合、イテレータをどのように初期化する必要がありますか? 私は実行時エラーがあり、私の推測は私のイテレータが無効であることです。

いくつかの関連するコード:

struct wordstype 
{ 
    string word; 
    int counter_same; 
    int counter_contained; 
    int counter_same1; 
}; 
std::vector<wordstype>::iterator iv=vec1.begin(); 
string temp_str; 
string::iterator is=str1.begin(); 

while (is!=str1.end()) 
{ 
    if (((*is)!='-')&&((*is)!='.')&&((*is)!=',')&&((*is)!=';')&&((*is)!='?')&&((*is)!='!')&&((*is)!=':')) 
    { 
     temp_str.push_back(*is); 
     ++is; 
    } 
    else 
    {   
     (*iv).word=temp_str; 
     ++iv; 
     str1.erase(is); 
     temp_str.clear(); 
    } 
} 
+0

[C++:構造体メンバにデータを挿入する方法(vector内に配置された構造体)](http://stackoverflow.com/questions/10208367/c-how-to-insert-data-to-a) -struct-member-struct-located-in-vector) –

+0

新しい質問を投稿するのではなく、元の質問を編集する必要があります。 –

+1

基本的に、wordsTypeにデータを取得し、vec1.push_back(wordsTypeObj)を実行します。それは安全です。 – Jagannath

答えて

0

構造体のメンバの値を変更すると、ベクトルの大きさに影響を与えることはありません。 空のベクトルの最初の要素にアクセスしようとしているため、実行時エラーが発生します。

代わりにこれを試してみてください:

wordstype wt;  // create a new struct 
wt.word = temp_str; // set its elements as desired 
vec1.push_back(wt); // insert the new struct into the empty vector 

はまた、あなたが次にあなたの現在のコードは(多少)に動作しますサイズ1で初期化します

vector<wordstype> vec1(1); 

としてベクトルを宣言することができます。

+0

"それから、あなたの現在のコードは動作します" - それが 'iv'をインクリメントし、2番目の要素にアクセスしようとします。 –

+0

@MikeSeymourそれで、私は「やや」を括弧に入れています - しかし、一度に1つの問題:彼はまだ他のバグを書いていません。 –

0

いいえ、ベクター要素がベクターに入る前に、ベクター要素の内容にアクセスすることはできません。

vec1.empty()trueの場合、ベクターには要素がありません。

wordstypeの別のインスタンスで新しいデータを作成し、それをベクターにプッシュする必要があります。

関連する問題