C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç¨åºæ¯æå·¥å ·
- std::initializer_list
- 彿°å¯¹è±¡
- std::hash
- std::pair
- std::tuple
- std::tie
- std::tuple<Types...>::tuple
- std::tuple<Types...>::swap
- std::make_tuple
- std::forward_as_tuple
- std::tuple çæ¨å¯¼æå¼
- std::tuple<Types...>::operator=
- std::tuple_cat
- operator==,!=,<,<=,>,>=,<=>(std::tuple)
- std::swap(std::tuple)
- std::get(std::tuple)
- std::tuple_size<std::tuple>
- std::tuple_element<std::tuple>
- std::uses_allocator<std::tuple>
- std::ignore
- std::apply
- åºç¹æ§æµè¯å® (C++20)
- std::optional
- std::any
- std::variant
- æ ¼å¼ååº (C++20)
- std::integer_sequence
- std::exchange
- std::make_from_tuple
- std::launder
- std::to_chars
- std::from_chars
- std::as_const
- std::source_location
- å忰彿°
- std::bitset
- std::cmp_equal, cmp_not_equal, cmp_less, cmp_greater, cmp_less_equal, cmp_greater_equal
- std::in_range
- std::declval
- std::forward
- std::move
- std::move_if_noexcept
- std::chars_format
- std::piecewise_construct_t
- std::piecewise_construct
- std::in_place, std::in_place_type, std::in_place_index, std::in_place_t, std::in_place_type_t, std::in_place_index_t
- 注é
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >å·¥å ·åº > std::tuple
std::tuple
| å®ä¹äºå¤´æä»¶ <tuple>
|
||
| template< class... Types > class tuple; |
(C++11 èµ·) | |
ç±»æ¨¡æ¿ std::tuple æ¯åºå®å¤§å°çå¼ç±»å¼æ±éã宿¯ std::pair çæ¨å¹¿ã
|
è¥ (std::is_trivially_destructible_v<Types> && ...) 为 true ï¼å |
(C++17 èµ·) |
模æ¿å½¢å
| Types... | - | tuple æåå¨çå
ç´ çç±»åãæ¯æç©ºå表ã
|
æå彿°
æé æ°ç tuple (å ¬å¼æå彿°) | |
èµå¼ä¸ä¸ª tuple çå
容ç»å¦ä¸ä¸ª (å ¬å¼æå彿°) | |
交æ¢ä¸¤ä¸ª tuple çå
容 (å ¬å¼æå彿°) |
éæå彿°
å建ä¸ä¸ª tuple 对象ï¼å
¶ç±»åæ ¹æ®åå®åç±»åå®ä¹ (彿°æ¨¡æ¿) | |
å建左å¼å¼ç¨ç tupleï¼æå° tuple è§£å
为ç¬ç«å¯¹è±¡ (彿°æ¨¡æ¿) | |
å建转åå¼ç¨ç tuple (彿°æ¨¡æ¿) | |
éè¿è¿æ¥ä»»ææ°éçå
ç»æ¥å建ä¸ä¸ªtuple (彿°æ¨¡æ¿) | |
| å
ç»å¼è®¿é®æå®çå
ç´ (彿°æ¨¡æ¿) | |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æåå
¸é¡ºåºæ¯è¾ tuple ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++11) |
ç¹å std::swap ç®æ³ (彿°æ¨¡æ¿) |
è¾ å©ç±»
å¨ç¼è¯æ¶è·å¾ tuple çå¤§å° (类模æ¿ç¹å) | |
| è·å¾æå®å
ç´ çç±»å (类模æ¿ç¹å) | |
| ç¹å std::uses_allocator ç±»åç¹å¾ (类模æ¿ç¹å) | |
ç¨ tie è§£å
tuple æ¶ç¨æ¥è·³è¿å
ç´ çå ä½ç¬¦ (常é) |
æ¨å¯¼æå¼(C++17 èµ·)
注解
N4387 ï¼ä½ä¸ºå¯¹ C++11 çç¼ºé·æ¥ååºç¨ï¼åï¼å½æ°ä¸è½ç¨å¤å¶å表åå§åè¿å tuple ï¼
std::tuple<int, int> foo_tuple() { return {1, -1}; // N4387 åé误 return std::tuple<int, int>{1, -1}; // å§ç»ææ return std::make_tuple(1, -1); // å§ç»ææ }
示ä¾
è¿è¡æ¤ä»£ç
#include <tuple> #include <iostream> #include <string> #include <stdexcept>  std::tuple<double, char, std::string> get_student(int id) { if (id == 0) return std::make_tuple(3.8, 'A', "Lisa Simpson"); if (id == 1) return std::make_tuple(2.9, 'C', "Milhouse Van Houten"); if (id == 2) return std::make_tuple(1.7, 'D', "Ralph Wiggum"); throw std::invalid_argument("id"); }  int main() { auto student0 = get_student(0); std::cout << "ID: 0, " << "GPA: " << std::get<0>(student0) << ", " << "grade: " << std::get<1>(student0) << ", " << "name: " << std::get<2>(student0) << '\n';  double gpa1; char grade1; std::string name1; std::tie(gpa1, grade1, name1) = get_student(1); std::cout << "ID: 1, " << "GPA: " << gpa1 << ", " << "grade: " << grade1 << ", " << "name: " << name1 << '\n';  // C++17 ç»æåç»å®ï¼ auto [ gpa2, grade2, name2 ] = get_student(2); std::cout << "ID: 2, " << "GPA: " << gpa2 << ", " << "grade: " << grade2 << ", " << "name: " << name2 << '\n'; }
è¾åºï¼
ID: 0, GPA: 3.8, grade: A, name: Lisa Simpson ID: 1, GPA: 2.9, grade: C, name: Milhouse Van Houten ID: 2, GPA: 1.7, grade: D, name: Ralph Wiggum
å¼ç¨
- C++17 standard (ISO/IEC 14882:2017):
- 23.5 Tuples [tuple]
- C++14 standard (ISO/IEC 14882:2014):
- 20.4 Tuples [tuple]
- C++11 standard (ISO/IEC 14882:2011):
- 20.4 Tuples [tuple]