Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Vector.reserve()和分配效率(C+;+;)_C++_Performance_Vector - Fatal编程技术网

C++ Vector.reserve()和分配效率(C+;+;)

C++ Vector.reserve()和分配效率(C+;+;),c++,performance,vector,C++,Performance,Vector,我试图在游戏中优化投射物的组织 我读到我应该避免在游戏运行时分配,以避免性能问题。因此,如果我在游戏状态开始时用reserve(1000)初始化一个向量,并在运行时通过push_back(sparlove())添加投射对象;这会导致“分配”吗?还是只是用东西填满已经分配的空间,而且是超快的;D根据射弹的可移动性,将射弹放置在向量中的不同方法具有不同的成本。从复制射弹到移动射弹,再到在原地建造射弹 但是还有一种更快的方法,即重用 在游戏开始前建造所有射弹,然后一直重复使用射弹 这将是非常快的,因为

我试图在游戏中优化投射物的组织


我读到我应该避免在游戏运行时分配,以避免性能问题。因此,如果我在游戏状态开始时用reserve(1000)初始化一个向量,并在运行时通过push_back(sparlove())添加投射对象;这会导致“分配”吗?还是只是用东西填满已经分配的空间,而且是超快的;D

根据射弹的可移动性,将射弹放置在向量中的不同方法具有不同的成本。从复制射弹到移动射弹,再到在原地建造射弹

但是还有一种更快的方法,即重用


在游戏开始前建造所有射弹,然后一直重复使用射弹

这将是非常快的,因为您不需要超过1000个元素。当您使用emplace\u back时,速度会更快,因为您可以避免可能的副本。@Surt push\u back支持移动语义什么是
投射物
?它可以移动吗?向量中有多少元素
vector
毕竟提供了摊销常数
push_back()
@AntoineMorrier,没错,但比move更快的是根本不移动或复制,构建到位。我尝试了重用方法,但它让我头疼:因为我在每场比赛中循环所有“活动”投射物,我想避免检查(投射物[I].active==true),但要使第一个“索引x”元素处于活动状态并调整x。如果我重复使用,一个投射物从活动变为非活动,我首先必须找到它在向量中的位置(通过所有活动元素循环),将它放在向量的末尾,并将每个具有较高索引的对象的位置调整为-1。这真的有效吗?如果你有两个变量,第一个是第一个活动的投射物,第二个是最后一个活动的投射物。这将减少您必须检查的条目数。但是,射弹的大小和组成也决定了它移动/复制的速度。另一种方法是,如果活动射弹较大,则有一个向量,其中只包含其入口编号。