重新初始化向量时使用两种方法
vector<int> vec(1000, 1);
//first
vec.assign(1000, 2);
//second
vec = vector<int>(1000, 3);
我认为这两种方法产生相同的结果,但我发现第二种方法占用的内存更少。
这两种方法有什么区别吗??
重新初始化向量时使用两种方法
vector<int> vec(1000, 1);
//first
vec.assign(1000, 2);
//second
vec = vector<int>(1000, 3);
我认为这两种方法产生相同的结果,但我发现第二种方法占用的内存更少。
这两种方法有什么区别吗??
不同之处在于如何处理内部存储器std::vector
。
和
std::vector<int> vec(1000, 1);
您创建了一个新的std::vector
名为vec
. 它分配内存来保存 1000int
秒并将它们的值初始化为1
.
在第一种方法中:
vec.assign(1000, 2);
然后,您告诉vec
重用分配的内存,即 1000 int
s 所在的位置。它们只是被 的值覆盖2
。
在第二种方法中:
std::vec = std::vector<int>(1000, 3);
你实际上做了两件事 - 你创建一个新std::vector
的分配内存 1000int
秒并将它们的值初始化为3
. 然后这个新向量被移动分配给vec
,它又会丢弃它的内存2
s 并使用它的 s 获取匿名未命名向量的内部内存3
,因为它是一个所谓的rvalue。
最后总的内存消耗应该是相同的,尽管当使用第二种方法时,你有 2 个分配的内存区域,int
每个 1000 秒,同时处于活动状态。