std::reserve和std::resize的區別
std::reserve是設定容器容量的,呼叫該函式後,容器的capacity可能會變大或不變,但不會變小
如:
vector value{ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 };
int k = value.capacity();
value.reserve(2);
int k1 = value.capacity();
在我本機上例k、k1都為15,即和value.size()大小相等,k1並不是2,如果將
value.reserve(2)改為 value.reserve(20),則k為15,k1為20
可以看到當reserve設定的引數比容器實際存放的元素個數小,則容器的capacity()不會變化,不會變小;當reserve設定的引數比容器實際存放的元素個數大,則容器的capacity()會增大至reserve設定的引數大小。
resize是改變容器內實際存放的元素個數的,注意和容器容量的區別,一般地容器容量>=容器實際存放元素個數。
繼續以上例講解:
vector value{ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 };
int k = value.capacity();
value.reserve(2);
int k1 = value.capacity();
value.resize(100);
k1 = value.capacity();
通過resize(100)將容器實際存放的元素擴大到100個後,因為原來的capacity()只有15個,存放不了100個元素,故容器內部也會自動將容量擴容,這裡在我本機k1變為了100。
int k = value.capacity();
value.reserve(2);
int k1 = value.capacity();
value.resize(100);
k1 = value.capacity();
value.resize(10);
k1 = value.capacity();
上例通過.resize(10)將實際存放的元素變為了10個(當需要減小容器的大小時,會移除多餘的元素。),其後的容量
k1依然是100,即不會縮小。
綜上:
std::reserve是設定容器容量的,呼叫該函式後,容器的capacity可能會變大或不變,但絕對不會比沒用呼叫該函式之前的還小。
resize是改變容器內實際存放的元素個數的,只有改變的大小超過了capacity時,capacity才會變大。
resize變小時,capacity不會影響。
一般地容器容量>=容器實際存放元素個數。
《std::vector的reserve和resize的區別》這篇文章也值得一看
相關文章
- std::vector 和 std::list 區別
- `std::packaged_task`、`std::thread` 和 `std::async` 的區別與聯絡Packagethread
- 【C++併發實戰】(三) std::future和std::promiseC++Promise
- c++11:std::boolalpha、std::noboolalphaC++
- std::bind與std::ref, why and how
- 理解 std::declval 和 decltype
- Numpy中reshape和resize的區別
- C++ 標準庫 std::set std::multiset swap()的使用C++
- 詭異!std::bind in std::bind 編譯失敗編譯
- C++ 智慧指標詳解: std::unique_ptr 和 std::shared_ptrC++指標
- (C++11/14/17學習筆記):std::atomic續、std::async與std::thread對比C++筆記thread
- C++11 執行緒同步介面std::condition_variable和std::future的簡單使用C++執行緒
- std::count 函式函式
- ODRDMS_GOV_STDGo
- std::make_shared
- C++(std::vector)C++
- std::packaged_task<返回型別(引數型別)>Package型別
- std::async的使用總結
- std::io::BufReader 物件借用和引用的問題物件
- std::cout 輸出 unsigned char型別資料型別
- 智慧指標思想實踐(std::unique_ptr, std::shared_ptr)指標
- RMS與Std的差別:均方差與標準差
- std::function用法學習Function
- zend_std_read_property
- c++11:std::bindC++
- std::string的find問題研究
- `std::future`--非同步的優勢非同步
- 透徹理解C++11新特性:右值引用、std::move、std::forwardC++Forward
- c++ std::vector 切記C++
- c++11:std::is_sameC++
- C++,std::shared_future的使用C++
- C++中的std::shared_ptrC++
- C++11中std::move、std::forward、左右值引用、移動建構函式的測試C++Forward函式
- 實作中的 std::is_detected 和 Detection Idioms (C++17)C++
- std::sort 錯誤"Expression : invalid operator <"Express
- C++(std::cout 處理 char*)C++
- 【譯】對Rust中的std::io::Error的研究RustError
- profile對比std::regex與boost::regex的效能