本網站意味着清除向量可以改變的能力:一個電話 後關於如何在矢量上調用清除容量改變容量,該標準說的是什麼?
http://en.cppreference.com/w/cpp/container/vector/clear
許多實現不會釋放分配的內存清除(),有效地離開向量的容量() 不變。
但根據@JamesKanze,這是錯誤的,標準要求明確不會改變容量。
標準說什麼?
本網站意味着清除向量可以改變的能力:一個電話 後關於如何在矢量上調用清除容量改變容量,該標準說的是什麼?
http://en.cppreference.com/w/cpp/container/vector/clear
許多實現不會釋放分配的內存清除(),有效地離開向量的容量() 不變。
但根據@JamesKanze,這是錯誤的,標準要求明確不會改變容量。
標準說什麼?
根據標準的版本你正在尋找, clear
被定義爲erase(begin(), end())
等效,或(在C++ 11):
「銷燬在會使所有元素的所有 引用,指針,並且迭代器指向 a和的元素可能會使 過去的末端迭代器失效。「
在任何情況下都不允許修改 的容量;下面的代碼是由 標準保證安全:
std::vector<int> v;
for (int i = 0; i != 5; ++ i) {
v.push_back(i);
}
assert(v.capacity() >= 5);
v.clear();
assert(v.capacity() >= 5);
v.push_back(10);
v.push_back(11);
std::vector<int>::iterator i = v.begin() + 1;
v.push_back(12);
v.push_back(13);
*i = 42; // i must still be valid, because none of
// the push_back would have required an
// increase of capacity
(原因在C++ 11中措辭的變化:委員會 不想要求MoveAssignable
爲clear
,這將 已這種情況下,如果它被定義爲erase
。)
+1瞭解更多信息 –
C++ 11報價中的內容表明容量不會改變? –
@NeilKirk什麼說它可以改變?它是可觀察狀態的一部分,只有當標準明確表示可以改變時才能改變。 –
+1其他人可能會遇到此問題,並混淆這麼好的問題。 –
http://en.cppreference.com/w/cpp/container/vector/clear已更新以反映@ JamesKanze的答案。 –
我遇到了同樣的問題,並且完全困惑,因爲[cplusplus](http://www.cplusplus.com/reference/vector/vector/clear/)對'clear'做了一個奇怪的陳述:「...和矢量容量不能保證改變「,我解釋爲:它可能會改變,但不能保證它會改變。 – user463035818