繁体   English   中英

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

[英]Using content of members of a Struct in a vector

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

结构定义:

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类型中转换字符串的方式并不满意,但它似乎有效。

我想在向量及其成员Surf_Comm中调用第i个结构的方式:

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

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

所有帮助都非常欢迎!!!

提前致谢,

问候,

斯特凡

无论i的值是i ,它都必须在std::vector 也就是说,你必须已经把至少i +1项目中std::vector

std::vector元素计数从零值开始。 因此,如果vector拥有一个元素,则该值的索引为0。在两个值的情况下-0和1,依此类推。 不要被size()向量方法所迷惑。 它返回许多保持元素。

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

如果将循环中的i值范围更改为for( i = 0; i < 10; i++ )则此代码应该可以工作。

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

不然你就是

  1. 通过push_back用data创建矢量元素0(矢量的第一个元素)
  2. 读取向量元素1(向量的第二个元素),直到下一次循环迭代时才存在。 哦,意大利面哦!
  3. segfault :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM