C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- std::array
- std::vector
- std::vector<T,Allocator>::push_back
- std::vector<T,Allocator>::assign
- std::vector<T,Allocator>::get_allocator
- std::vector<T,Allocator>::operator[]
- std::vector<T,Allocator>::front
- std::vector<T,Allocator>::at
- std::vector<T,Allocator>::pop_back
- std::vector<T,Allocator>::end, std::vector<T,Allocator>::cend
- std::vector<T,Allocator>::vector
- std::vector<T,Allocator>::~vector
- std::vector<T,Allocator>::operator=
- std::vector<T,Allocator>::back
- std::vector<T,Allocator>::data
- std::vector<T,Allocator>::begin, std::vector<T,Allocator>::cbegin
- std::vector<T,Allocator>::rbegin, std::vector<T,Allocator>::crbegin
- std::vector<T,Allocator>::rend, std::vector<T,Allocator>::crend
- std::vector<T,Allocator>::empty
- std::vector<T,Allocator>::size
- std::vector<T,Allocator>::max_size
- std::vector<T,Allocator>::reserve
- std::vector<T,Allocator>::capacity
- std::vector<T,Allocator>::shrink_to_fit
- std::vector<T,Allocator>::clear
- std::vector<T,Allocator>::insert
- std::vector<T,Allocator>::emplace
- std::vector<T,Allocator>::erase
- std::vector<T,Allocator>::emplace_back
- std::vector<T,Allocator>::resize
- std::vector<T,Allocator>::swap
- std::swap(std::vector)
- std::erase, std::erase_if (std::vector)
- operator==,!=,<,<=,>,>=,<=>(std::vector)
- std::vector çæ¨å¯¼æå¼
- std::map
- std::unordered_map
- std::priority_queue
- std::span
- std::forward_list
- std::deque
- std::list
- std::set
- std::multiset
- std::multimap
- std::unordered_set
- std::unordered_multiset
- std::unordered_multimap
- std::stack
- std::queue
- std::vector<bool>
- ç»ç¹ææ (C++17)
- 注é
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >容å¨åº >std::vector > std::vector<T,Allocator>::reserve
std::vector<T,Allocator>::reserve
| void reserve( size_type new_cap ); |
||
å¢å vector ç容éå°å¤§äºæçäº new_cap çå¼ãè¥ new_cap 大äºå½åç capacity() ï¼ååé
æ°åå¨ï¼å¦åè¯¥æ¹æ³ä¸åä»»ä½äºã
reserve() 䏿´æ¹ vector ç size ã
è¥ new_cap å¤§äº capacity() ï¼åææè¿ä»£å¨ï¼å
å«å°¾åè¿ä»£å¨åææå°å
ç´ çå¼ç¨é½è¢«éæ³åãå¦åï¼æ²¡æè¿ä»£å¨æå¼ç¨è¢«éæ³åã
åæ°
| new_cap | - | vector çæ°å®¹é |
| ç±»åè¦æ± | ||
-T å¿
须满足å¯ç§»å¨æå
¥ (MoveInsertable) çè¦æ±ã
| ||
è¿åå¼
ï¼æ ï¼
å¼å¸¸
- è¥ new_cap > max_size() å为 std::length_error ã
- ä»»ä½
Allocator::allocate()ææçå¼å¸¸ï¼å ¸å为 std::bad_alloc ï¼
è¥æåºå¼å¸¸ï¼åæ¤å½æ°æ ææï¼å¼ºå¼å¸¸ä¿è¯ï¼ã
|
è¥ |
(C++11 èµ·) |
å¤æåº¦
è³å¤ä¸å®¹å¨ç size() æçº¿æ§ã
注æ
ä¸è½ç¨ reserve() åå°å®¹å¨å®¹éã为该ç®çæä¾çæ¯ shrink_to_fit() ã
æ£ç¡®ä½¿ç¨ reserve() è½é¿å
ä¸å¿
è¦çåé
ï¼ä½ä¸éå½å°ä½¿ç¨ reserve() ï¼ä¾å¦å¨æ¯æ¬¡ push_back() è°ç¨åè°ç¨å®ï¼å¯è½ä¼å®é
å¢å éåé
çæ°éï¼éè¿å¯¼è´å®¹é线æ§èéææ°å¢é¿ï¼å¹¶å¯¼è´è®¡ç®å¤æåº¦å¢å ï¼æ§è½ä¸éã
示ä¾
#include <cstddef> #include <new> #include <vector> #include <iostream>  // 带è°è¯è¾åºçæå° C++11 åé å¨ template <class Tp> struct NAlloc { typedef Tp value_type; NAlloc() = default; template <class T> NAlloc(const NAlloc<T>&) {} Tp* allocate(std::size_t n) { n *= sizeof(Tp); std::cout << "allocating " << n << " bytes\n"; return static_cast<Tp*>(::operator new(n)); } void deallocate(Tp* p, std::size_t n) { std::cout << "deallocating " << n*sizeof(Tp) << " bytes\n"; ::operator delete(p); } }; template <class T, class U> bool operator==(const NAlloc<T>&, const NAlloc<U>&) { return true; } template <class T, class U> bool operator!=(const NAlloc<T>&, const NAlloc<U>&) { return false; }  int main() { int sz = 100; std::cout << "using reserve: \n"; { std::vector<int, NAlloc<int>> v1; v1.reserve(sz); for(int n = 0; n < sz; ++n) v1.push_back(n); } std::cout << "not using reserve: \n"; { std::vector<int, NAlloc<int>> v1; for(int n = 0; n < sz; ++n) v1.push_back(n); } }
å¯è½çè¾åºï¼
using reserve: allocating 400 bytes deallocating 400 bytes not using reserve: allocating 4 bytes allocating 8 bytes deallocating 4 bytes allocating 16 bytes deallocating 8 bytes allocating 32 bytes deallocating 16 bytes allocating 64 bytes deallocating 32 bytes allocating 128 bytes deallocating 64 bytes allocating 256 bytes deallocating 128 bytes allocating 512 bytes deallocating 256 bytes deallocating 512 bytes
åé
| è¿åå½ååå¨ç©ºé´è½å¤å®¹çº³çå
ç´ æ° (å ¬å¼æå彿°) | |
| è¿åå¯å®¹çº³çæå¤§å
ç´ æ° (å ¬å¼æå彿°) | |
| æ¹å容å¨ä¸å¯åå¨å
ç´ çä¸ªæ° (å ¬å¼æå彿°) | |
| (C++11) |
éè¿éæ¾æªä½¿ç¨çå
ååå°å
åçä½¿ç¨ (å ¬å¼æå彿°) |