经过出色的建议后,我定义了一个结构,用一个从文件读取的数据填充它并将其推送到一个向量上。尼斯!现在有人可以告诉我如何回调我推向载体的第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
答案 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>
否则,你是