在向量中使用Struct成员的内容

时间:2011-07-23 21:54:53

标签: c++ vector struct

经过出色的建议后,我定义了一个结构,用一个从文件读取的数据填充它并将其推送到一个向量上。尼斯!现在有人可以告诉我如何回调我推向载体的第i个结构成员的内容吗?

结构定义:

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

Struct的实例化和向量的定义:

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;   

我编译没有问题,但在运行时我得到段违规信号。作为初学者,我不知道发生了什么。

非常欢迎所有帮助!!!

提前致谢,

此致

的Stefan

3 个答案:

答案 0 :(得分:1)

无论i的价值是什么,它都必须位于std::vector。也就是说,您必须在i中添加至少std::vector + 1个项目。

答案 1 :(得分:1)

std::vector中的元素编号以零值开头。因此,如果vector包含一个元素,则该值的索引为0.如果有两个值 - 0和1,依此类推。不要被size()向量方法混淆。它返回了许多保留元素。

因此,新推送的值的索引等于size()-1。访问第i个元素(不存在)会导致错误。

如果您将周期中i值的范围更改为for( i = 0; i < 10; i++ ),则此代码应该有效。

答案 2 :(得分:1)

只能重申:在这种情况下,您在for循环中推回空向量并使用i访问同一循环中的数据,因此您必须将其更改为for(i=0; i<10; i++)。< / p>

否则,你是

  1. 通过push_back
  2. 创建带有数据的向量元素0(向量的第一个元素)
  3. 读取向量元素1(向量的第二个元素),它在下一个循环迭代之前不存在。 呃 - 哦,spaghetti-o's!
  4. segfault:)