簡體   English   中英

C ++:包含指針時std :: vector :: reserve不保留

[英]C++: std::vector::reserve not reserving when containing pointers

當標識符為std::vector<Foo*> reserve(...)類型時,我調用std::vector::reserve時不執行任何操作:

std::vector<int*> bar;
bar.reserve(20);

//I expect bar.size to return 20...
std::size_t sz = bar.size();
for(std::size_t i = 0; i < sz; ++i) {
    //Do Stuff to all items!
}

前面提到的for循環正好運行零次,而bar.size()返回零。 我不記得對於所有其他STL容器來說是否也是如此,但是如果是這樣,包括std :: vector的行為, 為什么?

.reserve()不會更改向量的大小。 您要查找的成員函數是.resize()。 reserve()只是一種優化。 如果要使用push_back()將一堆東西添加到矢量中,然后使用reserve()告訴它要添加多少東西,則可以使代碼運行更快。 但是,僅調用reserve()不會更改大小。

reserve更改矢量的容量,而不更改大小。 您可能想要resize

vector::reserve()更改矢量的容量 ,而不是其大小

capacity是內部已分配多少內存以容納向量的元素。 size是向量實際擁有的元素數。 vector::resize()影響后者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM