2011-07-23 36 views
1

在出色的建議之後,我定義了一個結構體,用從文件中讀取的數據填充它並將其推送到一個向量上。尼斯!現在有人可以告訴我如何回調我推向矢量的第i個結構成員的內容嗎?使用向量中Struct的成員的內容

結構定義:

struct Config_Data 
{ 
    int Surf_Index; 
    std::string Surf_Mnemo; 
    double Surf_Param[5]; 
    std::string Surf_Comm; 
}; 

該結構的實例化和矢量的定義:

Config_Data SURF; 
std::vector<Config_Data> CDATA_SURF; 

爲了填充結構:

for (i=1;i<=10;i++) 
{ 
    getline(INP_Stream, Line, delim_Config); 
    SURF.Surf_Index=atoi(Line.c_str()); 

    getline(INP_Stream,SURF.Surf_Mnemo,delim_Config); 
    SURF.Surf_Param[0]=Mnemo_list[SURF.Surf_Mnemo]; 
    for (j=1;j<=Mnemo_list[SURF.Surf_Mnemo];j++) 
    { 
     getline(INP_Stream,Line,delim_Config); 
     SURF.Surf_Param[j]=strtod(Line.c_str(),NULL); 
    } 
    getline(INP_Stream, SURF.Surf_Comm,delim_Line); 
    CDATA_SURF.push_back(SURF); 
    cout<<CDATA_SURF.size()<<endl; 
    string aaa=CDATA_SURF[i].Surf_Comm; 
} 

正如你可以看到我從csv文件讀取字符串。我並不滿意int或double類型的字符串轉換方式,但它似乎可行。

我想叫向量中的第i個結構及其成員Surf_Comm方式:

std::string aaa=CDATA_SURF[i].Surf_Comm; 

我編譯沒有問題,但在運行時我得到段違規信號。作爲一名初學者,我不知道發生了什麼。

所有幫助非常歡迎!

由於提前,

問候,

斯特凡

+1

你如何填補'Config_Data'情況下'CDATA_SURF'?看起來你使用的尺寸不正確。 –

+0

向我們展示相關的代碼。你看起來確實很好,我確信你使用它們的方式有一個錯誤。 –

+0

的確,我忘記了在push_back之前填充結構的部分。 – noste99

回答

1

std::vector中的元素計數以零值開始。因此,如果向量包含一個元素,則該值的索引爲0.在兩個值的情況下 - 0和1等等。不要被size()矢量方法困惑。它返回一些保留元素。

因此新推送值的索引等於size()-1。訪問第i個元素(不存在)會導致錯誤。

如果您將i值範圍更改爲for(i = 0; i < 10; i++),此代碼應該可以工作。

+0

謝謝,我在代碼修改後推回到I - 1,它確實有效。我以爲我已經測試過了,但沒有結果。在任何情況下解決問題!非常感謝。斯特凡 – noste99

1

不管的i的價值,它必須在std::vector。也就是說,您必須在std::vector中至少放置i +1項。

1

只能重申一次:在這種情況下,您將使用i推回for循環中的空向量並訪問同一循環內的數據,因此您必須將其更改爲for(i=0; i<10; i++)

否則,你是

  1. 創建具有數據向量元素0(矢量的第一個元素),經由的push_back
  2. 讀矢量元件1(矢量的第二元素),其不在下一次循環迭代之前不存在。 呃哦,意大利麪 - 哦!
  3. 段錯誤:)
相關問題