0

重新初始化向量时使用两种方法

vector<int> vec(1000, 1);

//first
vec.assign(1000, 2);

//second
vec = vector<int>(1000, 3);

我认为这两种方法产生相同的结果,但我发现第二种方法占用的内存更少。

这两种方法有什么区别吗??

4

1 回答 1

3

不同之处在于如何处理内部存储器std::vector

std::vector<int> vec(1000, 1);

您创建了一个新的std::vector名为vec. 它分配内存来保存 1000int秒并将它们的值初始化为1.

在第一种方法中:

vec.assign(1000, 2);

然后,您告诉vec重用分配的内存,即 1000 ints 所在的位置。它们只是被 的值覆盖2

在第二种方法中:

std::vec = std::vector<int>(1000, 3);

你实际上做了两件事 - 你创建一个新std::vector的分配内存 1000int秒并将它们的值初始化为3. 然后这个新向量被移动分配vec,它又会丢弃它的内存2s 并使用它的 s 获取匿名未命名向量的内部内存3,因为它是一个所谓的rvalue

最后总的内存消耗应该是相同的,尽管当使用第二种方法时,你有 2 个分配的内存区域,int每个 1000 秒,同时处于活动状态。

于 2020-09-02T13:46:40.040 回答