2012-04-18 59 views
-1

我正在使用结构体的空向量。C++:vectorof结构体

现在,当我输入数据的struct成员之一,它改变向量的大小?

如果是的话,我应该如何初始化迭代器? 我有一个运行时错误,我的猜测是我的迭代器是无效的。

一些相关的代码:

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++:如何插入数据到一个结构构件(结构位于矢量)](http://stackoverflow.com/questions/10208367/c-how-to-insert-data-to-a -struct-member-struct-located-in-vector) – 2012-04-18 12:54:49

+0

你应该编辑你原来的问题,而不是发布一个新的! – 2012-04-18 12:55:25

+1

基本上,获取数据到wordsType并做vec1.push_back(wordsTypeObj);这很安全。 – Jagannath 2012-04-18 12:56:03

回答

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.初始化它,然后你当前的代码就可以了(有点)。

+0

“然后您的当前代码将工作” - 直到它增加'iv'并尝试访问第二个元素。 – 2012-04-18 13:01:43

+0

@MikeSeymour那么,这就是为什么我把一个“有点”在parens - 一次一个问题,虽然:)他甚至还没有写出其他的错误。 – 2012-04-18 13:02:49

0

不,你不能在矢量存在之前访问向量元素的内容。

如果vec1.empty()true,有在载体中没有任何元素。

您需要的wordstype一个单独的实例来创建新的数据,然后将其推到载体。