-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 回答