Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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++; < >我使用的是结构 STD::vector ,以大小为nxm的C++代码存储2D数据。如果N与M非常不同,是否存在与我存储数据的顺序相关的性能问题_C++_Vector_Stdvector - Fatal编程技术网

向量在C++; < >我使用的是结构 STD::vector ,以大小为nxm的C++代码存储2D数据。如果N与M非常不同,是否存在与我存储数据的顺序相关的性能问题

向量在C++; < >我使用的是结构 STD::vector ,以大小为nxm的C++代码存储2D数据。如果N与M非常不同,是否存在与我存储数据的顺序相关的性能问题,c++,vector,stdvector,C++,Vector,Stdvector,例如,假设N=3,M=100000,我认为构建3个大小为100000的向量比构建100000个大小为3的向量要快。但是,例如,如果我使用大量的push_back来填充它们(假设我不知道初始大小),那么另一种方法不是更快吗 我认为构建3个大小为100000的向量比构建100000的向量更快 大小为3的向量 几乎可以肯定,是的(而且相当不错) 。。。如果我使用了很多推回来填充它们(假设我没有 知道初始尺寸) 如果您至少知道(或怀疑)最大大小可能是多少,您可以在循环之前使用函数,通过push_back

例如,假设N=3,M=100000,我认为构建3个大小为100000的向量比构建100000个大小为3的向量要快。但是,例如,如果我使用大量的
push_back
来填充它们(假设我不知道初始大小),那么另一种方法不是更快吗

我认为构建3个大小为100000的向量比构建100000的向量更快 大小为3的向量

几乎可以肯定,是的(而且相当不错)

。。。如果我使用了很多推回来填充它们(假设我没有 知道初始尺寸)


如果您至少知道(或怀疑)最大大小可能是多少,您可以在循环之前使用函数,通过
push_back
调用,然后再调用,以释放不需要的内存。这种方法可以减少(可能有许多)重新分配调用所造成的开销。

如果您关心性能,更好的决定可能是只使用一个
std::vector
和一些索引算法。我想这是一个矩阵,或者至少是等效的。为此,只需做一点研究,寻找有效的实现和/或在此讨论该主题。@Evg这肯定是一个更好的主意,但它只有在至少N或M已知的情况下才有效。我假设OP想要存储例如N=3但M未知的坐标,在这种情况下,您的建议会起作用(并且您可以使用缓存等,只要您不只是迭代x坐标)。我实际上只知道一个坐标(在运行时)。我确实可以使用一个向量,但一旦我的向量建立起来,我就在两个维度上使用方法,这就是为什么我提出向量向量,以避免之后的算术运算。不过,我不确定这是否有问题。