C++ 如何使用C++;具有用户定义结构的向量?
我正在尝试使用向量管理一组结构,但不断收到错误消息 该向量在头文件中声明为:C++ 如何使用C++;具有用户定义结构的向量?,c++,vector,visual-studio-2013,C++,Vector,Visual Studio 2013,我正在尝试使用向量管理一组结构,但不断收到错误消息 该向量在头文件中声明为: vector< TLE_Values, allocator<TLE_Values> > SavedSatellites; 并由构造函数使用默认值初始化 在主程序代码中,在确定了所需的元素数(CountItemsInFile())后,我尝试使用以下方法展开向量列表: SavedSatellites.push_back(CountItemsInFile()); 但是,这将返回以下编译器错误消息:
vector< TLE_Values, allocator<TLE_Values> > SavedSatellites;
并由构造函数使用默认值初始化
在主程序代码中,在确定了所需的元素数(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.
错误C2664:
'void std::vector::push_back(const TLE_Values&'):无法将参数1从'int'转换为'TLE_Values&'
1> 原因:无法从“int”转换为“TLE_值”
1> 没有构造函数可以采用源类型,或者构造函数重载解析不明确。
另一个线程建议向量需要用0初始化,这样的用户定义类型不会发生这种情况。
我错过了什么?我哪里出错了?如何用我的结构创建初始向量?
有很多关于使用类型(int)的向量的文档,但如果不使用整数,文档就不多了。这里的关键是:
void push_back (const value_type& val);
push_back
不接受int
,它接受与向量
保持的类型相同的参数。您需要给它一个TLE\u值
对象
您也不需要预先调整向量的大小;您只需继续呼叫向后推
,直到完成。此处的are键:
void push_back (const value_type& val);
push_back
不接受int
,它接受与向量
保持的类型相同的参数。您需要给它一个TLE\u值
对象
您也不需要预先调整向量的大小;您可以继续呼叫向后推
,直到完成。以扩展向量使用
SavedSatellites.resize(CountItemsInFile());
如果您只想为其保留内存,但保持向量大小不变,并准备好后续推回,而无需重新分配内存:
SavedSatellites.reserve(CountItemsInFile());
展开向量使用的步骤
SavedSatellites.resize(CountItemsInFile());
如果您只想为其保留内存,但保持向量大小不变,并准备好后续推回,而无需重新分配内存:
SavedSatellites.reserve(CountItemsInFile());
OP可能想调整大小()
。同意,但我认为他们不需要这样做。似乎他们对设置插入的向量感到困惑,并试图在填充之前调整其大小。希望我的编辑能为他们澄清这一点。@computerfreaker如果你知道应该始终调整的大小,否则你就浪费了分配…@BeyelerStudiospush_back
在这种情况下使用的插入方法是错误的,因为它总是添加一个额外的元素resize
后接push_back
只会浪费空间。@computerfreakerpush_back
当你知道大小并且reserve
+push_back
会浪费边界检查……OP可能想resize()
同意,但我认为他们不需要这样做。似乎他们对设置插入的向量感到困惑,并试图在填充之前调整其大小。希望我的编辑能为他们澄清这一点。@computerfreaker如果你知道应该始终调整的大小,否则你就浪费了分配…@BeyelerStudiospush_back
在这种情况下使用的插入方法是错误的,因为它总是添加一个额外的元素调整大小
后接推回
只会浪费空间。@computerfreaker推回
当您知道大小时总是错误的,保留
+推回
浪费边界检查。。。