[英]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.