重新初始化向量的两种方法有什么区别吗?
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 int
s 并将它们的值初始化为 1
.
第一种方法:
vec.assign(1000, 2);
然后您告诉 vec
重新使用分配的内存,其中有 1000 个 int
存在。它们只是被 2
.
的值覆盖
第二种方法:
std::vec = std::vector<int>(1000, 3);
您实际上做了两件事 - 您创建了一个新的 std::vector
,它为 1000 int
分配内存并将它们的值初始化为 3
。然后这个新的vector被move assigned到vec
,这反过来会丢掉它的2
s的内存,取匿名未命名vector的内部内存它的 3
s,因为它是一个 so-called rvalue.
总体内存消耗最终应该是相同的,尽管在使用第二种方法时,您暂时分配了 2 个 1000 int
s 的内存区域,同时处于活动状态。
我在重新初始化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 int
s 并将它们的值初始化为 1
.
第一种方法:
vec.assign(1000, 2);
然后您告诉 vec
重新使用分配的内存,其中有 1000 个 int
存在。它们只是被 2
.
第二种方法:
std::vec = std::vector<int>(1000, 3);
您实际上做了两件事 - 您创建了一个新的 std::vector
,它为 1000 int
分配内存并将它们的值初始化为 3
。然后这个新的vector被move assigned到vec
,这反过来会丢掉它的2
s的内存,取匿名未命名vector的内部内存它的 3
s,因为它是一个 so-called rvalue.
总体内存消耗最终应该是相同的,尽管在使用第二种方法时,您暂时分配了 2 个 1000 int
s 的内存区域,同时处于活动状态。