std::reserve和std::resize的区别
std::reserve是設(shè)置容器容量的,調(diào)用該函數(shù)后,容器的capacity可能會(huì)變大或不變,但不會(huì)變小
如:
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();在我本機(jī)上例k、k1都為15,即和value.size()大小相等,k1并不是2,如果將
?value.reserve(2)改為 value.reserve(20),則k為15,k1為20
可以看到當(dāng)reserve設(shè)置的參數(shù)比容器實(shí)際存放的元素個(gè)數(shù)小,則容器的capacity()不會(huì)變化,不會(huì)變小;當(dāng)reserve設(shè)置的參數(shù)比容器實(shí)際存放的元素個(gè)數(shù)大,則容器的capacity()會(huì)增大至reserve設(shè)置的參數(shù)大小。
resize是改變?nèi)萜鲀?nèi)實(shí)際存放的元素個(gè)數(shù)的,注意和容器容量的區(qū)別,一般地容器容量>=容器實(shí)際存放元素個(gè)數(shù)。
繼續(xù)以上例講解:
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();通過(guò)resize(100)將容器實(shí)際存放的元素?cái)U(kuò)大到100個(gè)后,因?yàn)樵瓉?lái)的capacity()只有15個(gè),存放不了100個(gè)元素,故容器內(nèi)部也會(huì)自動(dòng)將容量擴(kuò)容,這里在我本機(jī)k1變?yōu)榱?00。
int k = value.capacity();value.reserve(2);int k1 = value.capacity();value.resize(100);k1 = value.capacity();value.resize(10);k1 = value.capacity();上例通過(guò).resize(10)將實(shí)際存放的元素變?yōu)榱?0個(gè)(當(dāng)需要減小容器的大小時(shí),會(huì)移除多余的元素。),其后的容量
k1依然是100,即不會(huì)縮小。
綜上:
std::reserve是設(shè)置容器容量的,調(diào)用該函數(shù)后,容器的capacity可能會(huì)變大或不變,但絕對(duì)不會(huì)比沒(méi)用調(diào)用該函數(shù)之前的還小。
resize是改變?nèi)萜鲀?nèi)實(shí)際存放的元素個(gè)數(shù)的,只有改變的大小超過(guò)了capacity時(shí),capacity才會(huì)變大。
resize變小時(shí),capacity不會(huì)影響。
一般地容器容量>=容器實(shí)際存放元素個(gè)數(shù)。
《std::vector的reserve和resize的區(qū)別》這篇文章也值得一看
總結(jié)
以上是生活随笔為你收集整理的std::reserve和std::resize的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python 模拟伯努利试验和二项分布
- 下一篇: 王者荣耀怎么封号