-1

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

構造体メンバーの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();
    }
}
4

2 に答える 2

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

または、ベクトルを次のように宣言することもできます

vector<wordstype> vec1(1);

これにより、サイズ1で初期化されます。その後、現在のコードが(ある程度)機能します。

于 2012-04-18T12:55:07.673 に答える
0

いいえ、ベクター内に存在する前にベクター要素のコンテンツにアクセスすることはできません。

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

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

于 2012-04-18T12:55:15.223 に答える