如何使用具有用户定义结构的C ++向量?

时间:2016-04-14 10:36:03

标签: c++ vector visual-studio-2013

我正在尝试使用向量管理一组结构,但不断收到错误信息。

向量在头文件中声明为:

vector< TLE_Values, allocator<TLE_Values> > SavedSatellites;

VS2013非常满意。

结构定义为:

struct TLE_Values
{
    string CatalogNum;
    string SatelliteName;
    string DateStr;
    string TimeStr;
    string Classification;
    double DecayValue;
    int ElsetNum;
    double InclinationValue;
    double RaanValue;
    double EccentricityValue;
    double ArgPerigeeValue;
    double PerigeeAngle;
    double AvgSpeed;
    double Period;              
    int OrbitNum;
};

并由构造函数初始化为默认值。

在主程序代码中,确定了我需要的元素数量(CountItemsInFile())后,我尝试使用以下方法展开向量列表:

SavedSatellites.push_back(CountItemsInFile());

然而,这会返回以下编译器错误消息:

error C2664: 
'void std::vector<TLE_Values,std::allocator<TLE_Values>>::push_back(const TLE_Values &)' : cannot convert argument 1 from 'int' to 'TLE_Values &&'
1>          Reason: cannot convert from 'int' to 'TLE_Values'
1>          No constructor could take the source type, or constructor overload resolution was ambiguous.

另一个线程建议需要使用0初始化向量,这不会发生在这样的用户定义类型中。 我错过了什么?哪里出错了?如何使用我的结构创建初始向量? 有很多关于使用类型(int)的向量的文档,但是如果你不使用整数则不多。

2 个答案:

答案 0 :(得分:3)

展开矢量使用

SavedSatellites.resize(CountItemsInFile());

如果你只是想为它保留内存,但保持向量的大小不变,并为后续的push_back做好准备而不重新分配内存:

SavedSatellites.reserve(CountItemsInFile());

答案 1 :(得分:1)

docs是关键所在:

void push_back (const value_type& val);

push_back没有int,它会占用您vector所拥有的相同类型的参数。你需要给它一个TLE_Values对象。

您也不需要预先确定vector的尺寸;你可以继续致电push_back直到你完成。