2012-04-18 84 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