簡體   English   中英

C ++ std :: vector清除所有元素

[英]C++ std::vector clear all elements

考慮一個std::vector

std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);

vec.clear()vec = std::vector<int>()做同樣的工作嗎? 第二種情況下的解除分配怎么樣?

vec.clear()清除向量中的所有元素,保證vec.size() == 0

vec = std::vector<int>()調用copy / move(從C ++ 11開始)賦值運算符,這將vec的內容替換為other 在這種情況下, other是新構造的空vector<int> ,這意味着它與vec.clear();具有相同的效果vec.clear(); 唯一的區別是clear()不會影響向量的容量,而重新分配時,它會重置它。

舊元素正確釋放,就像使用clear()

請注意, vec.clear()始終如此快速,並且沒有優化器執行它的工作最有可能比構造新向量並將其分配給vec更快。

它們是不同的:

clear是保證不會改變的能力。

移動分配不能保證將容量更改為零,但在典型的實現中可能會也會如此。


clear保證是這個規則:

在調用reserve()之后發生的插入期間不會發生重新分配,直到插入使向量的大小大於capacity()的值reserve()為止

發布條件clear

擦除容器中的所有元素。 發布: a.empty()返回true

轉讓條件:

a = rv;

a應等於rv在此賦值之前的值

a = il;

將范圍[il.begin(),il.end())分配給a。 a的所有現有元素都被分配或銷毀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM