标准要求向量实现能够在运行时有效地添加元素。由于向量有效增长,因此定义特定大小的向量通常是不必要的--而且可能导致性能较差。此规则的例外情况是,如果所有元素实际上都需要相同的值。如果需要不同的元素值,通常更有效的方法是定义一个空向量,并将元素添加为我们在运行时需要知道的值。
阅读C++素数(C++ 11版)。有人能解释一下为什么会发生这种事吗。我的意思是,想象一下,我们需要在std::中添加大约100万个不同的数字。,为什么如果我把它们放到没有定义近似大小的向量中,将是比定义更“有效”的方法?我的意思是,我对向量大小和容量有一个模糊的理解,我相信每次向量超过其容量时,所有元素都被复制到较大的大小数组(n *2或n* 1.5附近的某个地方)。
发布于 2019-10-19 17:06:06
对于简单类型(如ints ),使用所需元素数声明向量可能比使用push_back更快,因为向量不需要进行任何重新分配。但是,对于具有构造函数的复杂类,这样做将默认地构造所有元素,然后覆盖它们,从而浪费时间。
在这两种情况下,最好的解决方案是使用reserve为所有元素同时分配空间,而无需构造这些元素。然后,您可以使用push_back而不必担心重新分配。
https://stackoverflow.com/questions/58465152
复制相似问题