[英]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()不會更改大小。
vector::reserve()
更改矢量的容量 ,而不是其大小 。
capacity
是內部已分配多少內存以容納向量的元素。 size
是向量實際擁有的元素數。 vector::resize()
影響后者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.