C++:vector中的resize()函数 VS reserve()函数
http://www.cplusplus.com/reference/vector/vector/vector/
寫代碼的時候無意錯用了這兩個函數 導致測試的時候,程序運行崩潰 發現這兩個函數還是有區別的
void reserve (size_type n);reserver函數用來給vector預分配存儲區大小,即capacity的值 ,但是沒有給這段內存進行初始化。reserve 的參數n是推薦預分配內存的大小,實際分配的可能等于或大于這個值,即n大于capacity的值,就會reallocate內存?capacity的值會大于或者等于n 。這樣,當ector調用push_back函數使得size 超過原來的默認分配的capacity值時 避免了內存重分配開銷。
需要注意的是:reserve 函數分配出來的內存空間,只是表示vector可以利用這部分內存,但vector不能有效地訪問這些內存空間,訪問的時候就會出現越界現象,導致程序崩潰。
void resize (size_type n); void resize (size_type n, value_type val);resize函數重新分配大小,改變容器的大小,并且創建對象
當n小于當前size()值時候,vector首先會減少size()值 保存前n個元素,然后將超出n的元素刪除(remove and destroy)
當n大于當前size()值時候,vector會插入相應數量的元素 使得size()值達到n,并對這些元素進行初始化,如果調用上面的第二個resize函數,指定val,vector會用val來初始化這些新插入的元素
當n大于capacity()值的時候,會自動分配重新分配內存存儲空間。
總結
以上是生活随笔為你收集整理的C++:vector中的resize()函数 VS reserve()函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lib 和 dll 的区别、生成以及使用
- 下一篇: 【资料整理】proftpd安装配置