重新初始化向量的两种方法有什么区别吗?

is there any difference between two methods that re-initializing vector?

我在重新初始化vector时使用了两种方法

vector<int> vec(1000, 1);

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

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

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

这两种方法有区别吗??

不同之处在于 std::vector 的内部存储器的处理方式。

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

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

第一种方法:

vec.assign(1000, 2);

然后您告诉 vec 重新使用分配的内存,其中有 1000 个 int 存在。它们只是被 2.

的值覆盖

第二种方法:

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

您实际上做了两件事 - 您创建了一个新的 std::vector,它为 1000 int 分配内存并将它们的值初始化为 3。然后这个新的vector被move assignedvec,这反过来会丢掉它的2s的内存,取匿名未命名vector的内部内存它的 3s,因为它是一个 so-called rvalue.

总体内存消耗最终应该是相同的,尽管在使用第二种方法时,您暂时分配了 2 个 1000 ints 的内存区域,同时处于活动状态。