2012-04-18 75 views
0

正如您可以在标题中看到的那样,我正在构造一个结构向量。C++:如何将数据插入结构成员(位于向量中的结构)

其中一个结构成员是字符串字。 当我试图以这种方式向该成员输入数据时:(* iv).word = temp_str;,我得到一个运行时错误。

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(); 
    } 
} 

这可能是相关的代码间隔。

应该说 - word和temp_str是字符串类型。 iv是向量的迭代器。

在这种情况下,输入数据到结构成员的正确方法是什么?

+0

发表一些代码,你分配temp_str – 2012-04-18 11:30:53

+0

你如何初始化你的载体?你如何迭代矢量?请提供相关代码片段 – giorashc 2012-04-18 11:31:25

+0

@iammilind,没有人负责出生在非英语国家。 – 2012-04-18 11:32:14

回答

2

你的迭代器可能是无效的,否则它不应该成为分配一个字符串到另一个字符串的问题。

的一个问题是该行:

str1.erase(is); 

这将无效is,你应该将其更改为:

is = str1.erase(is); 

什么iv点?看起来你需要添加类似:

while (is!=str1.end() && iv != something.end()) 

以及。

1

我想这是一个问题与迭代器或为矢量分配空间。这是什么应该工作

#define N 10 

struct myStruct 
{ 
    int a; 
    std::string str; 
}; 

int main() 
{ 
    std::vector<myStruct> myVector; 
    myVector.resize(N); 
    std::vector<myStruct>::iterator itr;  
    for (itr = myVector.begin(); itr != myVector.end(); ++itr) 
    { 
     std::string tmp = getString(); 
     itr->str = tmp; 
    } 
    return 0; 
} 
+0

当矢量大小未知时,您的解决方案是什么? – adamco 2012-04-18 12:24:37

+0

嗯,这真的取决于你想做什么..你可以在循环中使用vector的push_back方法,直到你得到一个空字符串或者表明你已经完成的东西。 – 2012-04-18 12:57:36