C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- C++ å ·åè¦æ±ï¼ 彿°å¯¹è±¡ (FunctionObject)
- C++ å ·åè¦æ±ï¼ äºå è°è¯ (BinaryPredicate)
- C++ å ·åè¦æ±ï¼ å¯é»è®¤æé (DefaultConstructible)
- C++ å ·åè¦æ±ï¼ å¯å¤å¶èµå¼ (CopyAssignable)
- C++ å ·åè¦æ±ï¼ å¯å¤å¶æé (CopyConstructible)
- C++ å ·åè¦æ±ï¼ å¯ç§»å¨èµå¼ (MoveAssignable) (C++11 èµ·)
- C++ å ·åè¦æ±ï¼ å¯ç§»å¨æé (MoveConstructible) (C++11 èµ·)
- C++ å ·åè¦æ±ï¼ 坿æ (Destructible)
- C++ å ·åè¦æ±ï¼ å¯å¹³å¡å¤å¶ (TriviallyCopyable)
- C++ å ·åè¦æ±ï¼ å¯ç¸çæ¯è¾ (EqualityComparable)
- C++ å ·åè¦æ±ï¼ å¯å°äºæ¯è¾ (LessThanComparable)
- C++ å ·åè¦æ±ï¼ æ¯è¾ (Compare)
- C++ å ·åè¦æ±ï¼ åé¢ç±»å (LiteralType)
- C++ å ·åè¦æ±ï¼ ç®æ§æ°æ®ç±»å (PODType)
- C++ å ·åè¦æ±ï¼ å¹³å¡ç±»å (TrivialType)
- C++ å ·åè¦æ±ï¼ æ åå¸å±ç±»å (StandardLayoutType)
- C++ å ·åè¦æ±ï¼ éçååè¿ä»£å¨ (LegacyForwardIterator)
- C++ å ·åè¦æ±ï¼ å¯äº¤æ¢ (Swappable)
- C++ å ·åè¦æ±ï¼ å¼å¯äº¤æ¢ (ValueSwappable)
- C++ å ·åè¦æ±ï¼ å¯ç©ºæé (NullablePointer) (C++11 èµ·)
- C++ å ·åè¦æ±ï¼ æ£å (Hash)
- C++ å ·åè¦æ±ï¼ åé å¨ (Allocator)
- C++ å ·åè¦æ±ï¼ å¯è°ç¨ (Callable)
- C++ å ·åè¦æ±ï¼ è°è¯ (Predicate)
- C++ å ·åè¦æ±ï¼ å®¹å¨ (Container)
- C++ å ·åè¦æ±ï¼ åºåå®¹å¨ (SequenceContainer)
- C++ å ·åè¦æ±ï¼ è¿ç»å®¹å¨ (ContiguousContainer)
- C++ å ·åè¦æ±ï¼ å¯éå®¹å¨ (ReversibleContainer)
- C++ å ·åè¦æ±ï¼ å ³èå®¹å¨ (AssociativeContainer)
- C++ å ·åè¦æ±ï¼ å ·åé å¨å®¹å¨ (AllocatorAwareContainer)
- C++ å ·åè¦æ±ï¼ æ åºå ³èå®¹å¨ (UnorderedAssociativeContainer)
- C++ å ·åè¦æ±ï¼ å¯é»è®¤æå ¥ (DefaultInsertable)
- C++ å ·åè¦æ±ï¼ å¯å¤å¶æå ¥ (CopyInsertable)
- C++ å ·åè¦æ±ï¼ å¯ç§»å¨æå ¥ (MoveInsertable) (C++11 èµ·)
- C++ å ·åè¦æ±ï¼ å¯å°±ä½æé (EmplaceConstructible) (C++11 èµ·)
- C++ å ·åè¦æ±ï¼ 坿¦é¤ (Erasable)
- C++ å ·åè¦æ±ï¼ éçè¿ä»£å¨ (LegacyIterator)
- C++ å ·åè¦æ±ï¼ éçè¾åºè¿ä»£å¨ (LegacyOutputIterator)
- C++ å ·åè¦æ±ï¼ éçè¾å ¥è¿ä»£å¨ (LegacyInputIterator)
- C++ å ·åè¦æ±ï¼ éçååè¿ä»£å¨ (LegacyBidirectionalIterator)
- C++ å ·åè¦æ±ï¼ éçéæºè®¿é®è¿ä»£å¨ (LegacyRandomAccessIterator)
- C++ å ·åè¦æ±ï¼ éçè¿ç»è¿ä»£å¨ (LegacyContiguousIterator)
- C++ å ·åè¦æ±ï¼ 常é表达å¼è¿ä»£å¨ (ConstexprIterator)
- C++ å ·åè¦æ±ï¼ ææ ¼å¼è¾å ¥å½æ° (FormattedInputFunction)
- C++ å ·åè¦æ±ï¼ æ æ ¼å¼è¾å ¥å½æ° (UnformattedInputFunction)
- C++ å ·åè¦æ±ï¼ ææ ¼å¼è¾åºå½æ° (FormattedOutputFunction)
- C++ å ·åè¦æ±ï¼ æ æ ¼å¼è¾åºå½æ° (UnformattedOutputFunction)
- C++ å ·åè¦æ±ï¼ ç§ååºå (SeedSequence)
- C++ å ·åè¦æ±ï¼ éæºæ°å¼æ (RandomNumberEngine)
- C++ å ·åè¦æ±ï¼ éæºæ°åå¸ (RandomNumberDistribution)
- C++ å ·åè¦æ±ï¼ ååéæºä½çæå¨ (UniformRandomBitGenerator)
- C++ å ·åè¦æ±ï¼ éæºæ°å¼æéé å¨ (RandomNumberEngineAdaptor)
- C++ å ·åè¦æ±ï¼ åºæ¬å¯éå® (BasicLockable)
- C++ å ·åè¦æ±ï¼ å¯éå® (Lockable)
- C++ å ·åè¦æ±ï¼ å¯å®æ¶éå® (TimedLockable)
- C++ å ·åè¦æ±ï¼ äºæ¥ä½ (Mutex)
- C++ å ·åè¦æ±ï¼ 宿¶äºæ¥ä½ (TimedMutex)
- C++ å ·åè¦æ±ï¼ å ±äº«äºæ¥ä½ (SharedMutex)
- C++ å ·åè¦æ±ï¼ å ±äº«å®æ¶äºæ¥ä½ (SharedTimedMutex)
- C++ å ·åè¦æ±ï¼ å符ç¹å¾ (CharTraits)
- C++ å ·åè¦æ±ï¼ æ£å表达å¼ç¹å¾ (RegexTraits)
- C++ å ·åè¦æ±ï¼ 使©ç ç±»å (BitmaskType)
- C++ å ·åè¦æ±ï¼ æ°å¼ç±»å (NumericType)
- C++ å ·åè¦æ±ï¼ ä¸å ç±»åç¹å¾ (UnaryTypeTrait)
- C++ å ·åè¦æ±ï¼ äºå ç±»åç¹å¾ (BinaryTypeTrait)
- C++ å ·åè¦æ±ï¼ 忢ç¹å¾ (TransformationTrait)
- C++ å ·åè¦æ±ï¼ æ¶é (Clock)
- C++ å ·åè¦æ±ï¼ 平塿¶é (TrivialClock)
- 注é
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >å ·åè¦æ± > C++ å ·åè¦æ±ï¼ å ·åé å¨å®¹å¨ (AllocatorAwareContainer)
C++ å ·åè¦æ±ï¼ å ·åé å¨å®¹å¨ (AllocatorAwareContainer)
å ·åé å¨å®¹å¨ (AllocatorAwareContainer) æ¯å®¹å¨ (Container) ï¼å ¶ä¿æä¸ä¸ªåé å¨ (Allocator) å®ä¾ï¼å¹¶äºå ¶æææå彿°ä¸ç¨è¯¥å®ä¾æ¥åé åè§£åé å åï¼å¹¶äºè¿ä¸ªå å䏿é åéæ¯å¯¹è±¡çï¼è¿ç§å¯¹è±¡å¯ä»¥æ¯å®¹å¨å ç´ ï¼ç»ç¹ï¼æå¯¹äºæ åºå®¹å¨ä¸ºæ¡¶æ°ç»ï¼ã
ä¸åè§åéç¨äºå®¹å¨çæé
- å ·åé å¨å®¹å¨ (AllocatorAwareContainer) çå¤å¶æé 彿°ï¼éè¿å¨æ£å¨å¤å¶ç容å¨çåé å¨ä¸è°ç¨ std::allocator_traits<allocator_type>::select_on_container_copy_construction è·å¾èªå·±çåé å¨å®ä¾ã
- ç§»å¨æé 彿°éè¿ä»å±äºæ§å®¹å¨çåé å¨è¿è¡ç§»å¨æé ï¼è·å¾å ¶èªå·±çåé å¨å®ä¾ã
- ææå ¶ä»æé 彿°åæ¥æ¶ä¸ä¸ªåé å¨å½¢åã
ä» æçæ¿æ¢åé å¨çæ¹å¼æ¯è¿è¡ç§»å¨èµå¼ãå¤å¶èµå¼å交æ¢ï¼
- ä» å½ std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value 为 true æ¶ï¼å¤å¶èµå¼æä¼æ¿æ¢åé å¨
- ä» å½ std::allocator_traits<allocator_type>::propagate_on_container_move_assignment::value 为 true æ¶ï¼ç§»å¨èµå¼æä¼æ¿æ¢åé å¨
- ä» å½ std::allocator_traits<allocator_type>::propagate_on_container_swap::value 为 true æ¶ï¼äº¤æ¢æä¼æ¿æ¢åé å¨ãç¹å«æ¯å®å°éè¿å¯¹éæå彿° swap çæ éå®çè°ç¨æ¥äº¤æ¢åé å¨å®ä¾ï¼è§å¯äº¤æ¢ (Swappable) ã
注ï¼è¥ propagate_on_container_swap 为 falseï¼å交æ¢ä¸¤ä¸ªæ¥æä¸ç¸çåé
å¨ç容卿¯æªå®ä¹è¡ä¸ºã
- 访é®å¨
get_allocator()è·å¾æé 容卿¶æç¨çï¼æä¸ºæè¿çåé 卿¿æ¢æä½æå®è£ çåé å¨çä¸ä¸ªå¯æ¬ã
è¦æ±
å¡ä¾ | |
X
|
容å¨ç±»å |
T
|
å ç´ ç±»å |
A
|
T çåé
å¨
|
a, b
|
X ç±»åç对象ï¼é const å·¦å¼ï¼
|
t
|
X ç±»åç对象ï¼å·¦å¼æ const å³å¼ï¼
|
rv
|
X ç±»åç对象ï¼é const å³å¼ï¼
|
m
|
A ç±»åç对象
|
Q
|
åé å¨ç±»å |
| è¡¨è¾¾å¼ | è¿åç±»å | åæ/è¦æ± | åç½®/æåº | å¤æåº¦ |
|---|---|---|---|---|
| allocator_type | A |
allocator_type::value_type å¿ é¡»ä¸ X::value_type ç¸å | ç¼è¯æ¶ | |
| get_allocator() | A |
å¸¸æ° | ||
| X u; | A å¯é»è®¤æé (DefaultConstructible) |
u.empty() == true && u.get_allocator() == A() | å¸¸æ° | |
| X u(m); | u.empty() == true && u.get_allocator() == m | å¸¸æ° | ||
| X u(t,m); | T å¯å¤å¶æå
¥ (CopyInsertable) å° X
|
u == t && u.get_allocator() == m | çº¿æ§ | |
| X u(rv); | A çç§»å¨æé 彿°å¿
须䏿å¼å¸¸
|
u æ¥æä¸ rv æé åç¸åçå
ç´ åç¸ççåé
å¨ |
å¸¸æ° | |
| X u(rv,m); | T å¯ç§»å¨æå
¥ (MoveInsertable) å° X
|
u çå
ç´ ä¸ rv çç¸åææ¯å
¶å¯æ¬ï¼ä¸ u.get_allocator() == m
|
è¥ m == rv.get_allocator() å为常æ°ï¼å¦åä¸ºçº¿æ§ | |
| a = t | X& | T å¯å¤å¶æå
¥ (CopyInsertable) å° X ä¸å¯å¤å¶èµå¼ (CopyAssignable) |
a == t | çº¿æ§ |
| a = rv | X& | è¥åé
å¨å°ä¸è¢«ç§»å¨èµå¼ææ¿æ¢ï¼è§ä¸æï¼ï¼å T å¯ç§»å¨æå
¥ (MoveInsertable) å° X å¹¶å¯ç§»å¨èµå¼ (MoveAssignable)
|
a çæææ¢åå
ç´ è¢«ç§»å¨èµå¼æéæ¯ï¼a çäº rv èµå¼åææ¥æçå¼ |
çº¿æ§ |
| a.swap(b) | void | äº¤æ¢ a ä¸ b çå
容 |
å¸¸æ° |
æ¦å¿µè¦æ±
- A
- T
- X
注解
å
·åé
å¨å®¹å¨å§ç»è°ç¨ std::allocator_traits<A>::construct(m, p, args) å¨ p ä¸ç¨ args æ¥æé ä¸ä¸ª A ç±»åç对象ï¼å
¶ä¸ m == get_allocator()ãstd::allocator ä¸é»è®¤ç construct è°ç¨ ::new((void*)p) T(args)ï¼ä½ç¹åçåé
å¨å¯ä»¥éæ©ä¸åçå®ä¹ã
æ ååº
æææ ååºå®¹å¨ï¼é¤äº std::arrayï¼é½æ¯å ·åé å¨å®¹å¨ (AllocatorAwareContainer) ï¼