C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- æ ååºå¤´æä»¶ <ctime>
- æ ååºå¤´æä»¶ <cstring>
- æ ååºå¤´æä»¶ <set>
- æ ååºå¤´æä»¶ <cctype>
- æ ååºå¤´æä»¶ <cwctype>
- æ ååºå¤´æä»¶ <utility>
- æ ååºå¤´æä»¶ <queue>
- æ ååºå¤´æä»¶ <complex>
- æ ååºå¤´æä»¶ <iterator>
- æ ååºå¤´æä»¶ <algorithm>
- æ ååºå¤´æä»¶ <valarray>
- æ ååºå¤´æä»¶ <numeric>
- æ ååºå¤´æä»¶ <cmath>
- æ ååºå¤´æä»¶ <iosfwd>
- æ ååºå¤´æä»¶ <ios>
- æ ååºå¤´æä»¶ <iomanip>
- æ ååºå¤´æä»¶ <streambuf>
- æ ååºå¤´æä»¶ <istream>
- æ ååºå¤´æä»¶ <ostream>
- æ ååºå¤´æä»¶ <iostream>
- æ ååºå¤´æä»¶ <sstream>
- æ ååºå¤´æä»¶ <clocale>
- æ ååºå¤´æä»¶ <vector>
- æ ååºå¤´æä»¶ <deque>
- æ ååºå¤´æä»¶ <list>
- æ ååºå¤´æä»¶ <map>
- æ ååºå¤´æä»¶ <cwchar>
- æ ååºå¤´æä»¶ <locale>
- æ ååºå¤´æä»¶ <codecvt>
- æ ååºå¤´æä»¶ <bitset>
- æ ååºå¤´æä»¶ <functional>
- æ ååºå¤´æä»¶ <stdexcept>
- æ ååºå¤´æä»¶ <csignal>
- æ ååºå¤´æä»¶ <csetjmp>
- æ ååºå¤´æä»¶ <stack>
- æ ååºå¤´æä»¶ <cassert>
- æ ååºå¤´æä»¶ <cerrno>
- æ ååºå¤´æä»¶ <memory>
- æ ååºå¤´æä»¶ <typeindex>
- æ ååºå¤´æä»¶ <type_traits>
- æ ååºå¤´æä»¶ <chrono>
- æ ååºå¤´æä»¶ <initializer_list>
- æ ååºå¤´æä»¶ <tuple>
- æ ååºå¤´æä»¶ <scoped_allocator>
- æ ååºå¤´æä»¶ <cstdint>
- æ ååºå¤´æä»¶ <cinttypes>
- æ ååºå¤´æä»¶ <system_error>
- æ ååºå¤´æä»¶ <cuchar>
- æ ååºå¤´æä»¶ <array>
- æ ååºå¤´æä»¶ <forward_list>
- æ ååºå¤´æä»¶ <unordered_set>
- æ ååºå¤´æä»¶ <unordered_map>
- æ ååºå¤´æä»¶ <random>
- æ ååºå¤´æä»¶ <ratio>
- æ ååºå¤´æä»¶ <cfenv>
- æ ååºå¤´æä»¶ <regex>
- æ ååºå¤´æä»¶ <atomic>
- æ ååºå¤´æä»¶ <thread>
- æ ååºå¤´æä»¶ <mutex>
- æ ååºå¤´æä»¶ <future>
- æ ååºå¤´æä»¶ <condition_variable>
- æ ååºå¤´æä»¶ <any>
- æ ååºå¤´æä»¶ <optional>
- æ ååºå¤´æä»¶ <variant>
- æ ååºå¤´æä»¶ <memory_resource>
- æ ååºå¤´æä»¶ <string_view>
- æ ååºå¤´æä»¶ <charconv>
- æ ååºå¤´æä»¶ <execution>
- æ ååºå¤´æä»¶ <filesystem>
- æ ååºå¤´æä»¶ <concepts>
- æ ååºå¤´æä»¶ <coroutine>
- æ ååºå¤´æä»¶ <compare>
- æ ååºå¤´æä»¶ <version>
- æ ååºå¤´æä»¶ <source_location>
- æ ååºå¤´æä»¶ <format>
- æ ååºå¤´æä»¶ <span>
- æ ååºå¤´æä»¶ <ranges>
- æ ååºå¤´æä»¶ <bit>
- æ ååºå¤´æä»¶ <numbers>
- æ ååºå¤´æä»¶ <syncstream>
- æ ååºå¤´æä»¶ <stop_token>
- æ ååºå¤´æä»¶ <semaphore>
- æ ååºå¤´æä»¶ <latch>
- æ ååºå¤´æä»¶ <barrier>
- æ ååºå¤´æä»¶ <string>
- æ ååºå¤´æä»¶ <cstddef>
- æ ååºå¤´æä»¶ <limits>
- æ ååºå¤´æä»¶ <cfloat>
- æ ååºå¤´æä»¶ <climits>
- æ ååºå¤´æä»¶ <cstdlib>
- æ ååºå¤´æä»¶ <new>
- æ ååºå¤´æä»¶ <typeinfo>
- æ ååºå¤´æä»¶ <exception>
- æ ååºå¤´æä»¶ <cstdarg>
- æ ååºå¤´æä»¶ <ciso646>
- æ ååºå¤´æä»¶ <cstdalign>
- æ ååºå¤´æä»¶ <cstdbool>
- æ ååºå¤´æä»¶ <fstream>
- æ ååºå¤´æä»¶ <cstdio>
- æ ååºå¤´æä»¶ <strstream>
- æ ååºå¤´æä»¶ <shared_mutex>
- æ ååºå¤´æä»¶ <ccomplex>
- æ ååºå¤´æä»¶ <ctgmath>
- 注é
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >C++ æ ååºå¤´æä»¶ > æ ååºå¤´æä»¶ <tuple>
æ ååºå¤´æä»¶ <tuple>
æ¤å¤´æä»¶æ¯éç¨å·¥å ·åºçä¸é¨åã
ç±» | |
| (C++11) |
å®ç°åºå®å¤§å°ç容å¨ï¼å®ä¿æç±»åå¯ä»¥ç¸å¼çå
ç´ (类模æ¿) |
å¨ç¼è¯æ¶è·å¾ tuple çå¤§å° (类模æ¿ç¹å) | |
| è·å¾æå®å
ç´ çç±»å (类模æ¿ç¹å) | |
| ç¹å std::uses_allocator ç±»åç¹å¾ (类模æ¿ç¹å) | |
常é | |
ç¨ tie è§£å
tuple æ¶ç¨æ¥è·³è¿å
ç´ çå ä½ç¬¦ (常é) | |
彿° | |
å建ä¸ä¸ª tuple 对象ï¼å
¶ç±»åæ ¹æ®åå®åç±»åå®ä¹ (彿°æ¨¡æ¿) | |
å建左å¼å¼ç¨ç tupleï¼æå° tuple è§£å
为ç¬ç«å¯¹è±¡ (彿°æ¨¡æ¿) | |
å建转åå¼ç¨ç tuple (彿°æ¨¡æ¿) | |
éè¿è¿æ¥ä»»ææ°éçå
ç»æ¥å建ä¸ä¸ªtuple (彿°æ¨¡æ¿) | |
| å
ç»å¼è®¿é®æå®çå
ç´ (彿°æ¨¡æ¿) | |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æåå
¸é¡ºåºæ¯è¾ tuple ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++11) |
ç¹å std::swap ç®æ³ (彿°æ¨¡æ¿) |
| (C++17) |
以ä¸ä¸ªå®åçå
ç»æ¥è°ç¨å½æ° (彿°æ¨¡æ¿) |
| (C++17) |
以ä¸ä¸ªå®åå
ç»æé 对象 (彿°æ¨¡æ¿) |
æ¦è¦
namespace std { // ç±»æ¨¡æ¿ tuple: template <class... Types> class tuple;  // tuple åå»ºå½æ° inline constexpr /* æªææ */ ignore; template <class... Types> constexpr tuple<VTypes...> make_tuple(Types&&...); template <class... Types> constexpr tuple<Types...> forward_as_tuple(Types&&...) noexcept; template<class... Types> constexpr tuple<Types&...> tie(Types&...) noexcept; template <class... Tuples> constexpr tuple<CTypes...> tuple_cat(Tuples&&...);  // 以å®å tuple è°ç¨å½æ° template <class F, class Tuple> constexpr decltype(auto) apply(F&& f, Tuple&& t);  template <class T, class Tuple> constexpr T make_from_tuple(Tuple&& t);  // tuple è¾ å©ç±»ï¼ template <class T> class tuple_size; // æªäºå®ä¹ template <class T> class tuple_size<const T>; template <class T> class tuple_size<volatile T>; template <class T> class tuple_size<const volatile T>; template <class... Types> class tuple_size<tuple<Types...> >;  template <size_t I, class T> class tuple_element; // æªäºå®ä¹ template <size_t I, class T> class tuple_element<I, const T>; template <size_t I, class T> class tuple_element<I, volatile T>; template <size_t I, class T> class tuple_element<I, const volatile T>; template <size_t I, class... Types> class tuple_element<I, tuple<Types...> >;  // å ç´ è®¿é®ï¼ template <size_t I, class... Types> constexpr tuple_element_t<I, tuple<Types...>>& get(tuple<Types...>&) noexcept; template <size_t I, class... Types> constexpr tuple_element_t<I, tuple<Types...>>&& get(tuple<Types...>&&) noexcept; template <size_t I, class... Types> constexpr const tuple_element_t<I, tuple<Types...>>& get(const tuple<Types...>&) noexcept; template <size_t I, class... Types> constexpr const tuple_element_t<I, tuple<Types...>>&& get(const tuple<Types...>&&) noexcept; template <class T, class... Types> constexpr T& get(tuple<Types...>& t) noexcept; template <class T, class... Types> constexpr T&& get(tuple<Types...>&& t) noexcept; template <class T, class... Types> constexpr const T& get(const tuple<Types...>& t) noexcept; template <class T, class... Types> constexpr const T&& get(const tuple<Types...>&& t) noexcept;  // å ³ç³»è¿ç®ç¬¦ï¼ template<class... TTypes, class... UTypes> constexpr bool operator==(const tuple<TTypes...>&, const tuple<UTypes...>&); template<class... TTypes, class... UTypes> constexpr bool operator<(const tuple<TTypes...>&, const tuple<UTypes...>&); template<class... TTypes, class... UTypes> constexpr bool operator!=(const tuple<TTypes...>&, const tuple<UTypes...>&); template<class... TTypes, class... UTypes> constexpr bool operator>(const tuple<TTypes...>&, const tuple<UTypes...>&); template<class... TTypes, class... UTypes> constexpr bool operator<=(const tuple<TTypes...>&, const tuple<UTypes...>&); template<class... TTypes, class... UTypes> constexpr bool operator>=(const tuple<TTypes...>&, const tuple<UTypes...>&);  // åé å¨ç¸å ³ç¹å¾ template <class... Types, class Alloc> struct uses_allocator<tuple<Types...>, Alloc>; // ç¹åçç®æ³ï¼ template <class... Types> constexpr void swap(tuple<Types...>& x, tuple<Types...>& y) noexcept(x.swap(y)); // tuple è¾ å©ç±» template <class T> constexpr size_t tuple_size_v = tuple_size<T>::value; }
ç±» std::tuple
template <class... Types> class tuple { public: // tuple æé /* æ¡ä»¶æ§-explicit */ constexpr tuple(); // ä» å½ sizeof...(Types) >= 1 /* æ¡ä»¶æ§-explicit */ constexpr tuple(const Types&...); // ä» å½ sizeof...(Types) >= 1 template <class... UTypes> /* æ¡ä»¶æ§-explicit */ constexpr tuple(UTypes&&...); tuple(const tuple&) = default; tuple(tuple&&) = default; template <class... UTypes> /* æ¡ä»¶æ§-explicit */ constexpr tuple(const tuple<UTypes...>&); template <class... UTypes> /* æ¡ä»¶æ§-explicit */ constexpr tuple(tuple<UTypes...>&&); // ä» å½ sizeof...(Types) == 2 template <class U1, class U2> /* æ¡ä»¶æ§-explicit */ constexpr tuple(const pair<U1, U2>&); // ä» å½ sizeof...(Types) == 2 template <class U1, class U2> /* æ¡ä»¶æ§-explicit */ constexpr tuple(pair<U1, U2>&&);  // åé 卿©å±æé 彿° template <class Alloc> constexpr tuple(allocator_arg_t, const Alloc& a); template <class Alloc> /* æ¡ä»¶æ§-explicit */ constexpr tuple(allocator_arg_t, const Alloc& a, const Types&...); template <class Alloc, class... UTypes> /* æ¡ä»¶æ§-explicit */ constexpr tuple(allocator_arg_t, const Alloc& a, UTypes&&...); template <class Alloc> constexpr tuple(allocator_arg_t, const Alloc& a, const tuple&); template <class Alloc> constexpr tuple(allocator_arg_t, const Alloc& a, tuple&&); template <class Alloc, class... UTypes> /* æ¡ä»¶æ§-explicit */ constexpr tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&); template <class Alloc, class... UTypes> /* æ¡ä»¶æ§-explicit */ constexpr tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...>&&); template <class Alloc, class U1, class U2> /* æ¡ä»¶æ§-explicit */ constexpr tuple(allocator_arg_t, const Alloc& a, const pair<U1, U2>&); template <class Alloc, class U1, class U2> /* æ¡ä»¶æ§-explicit */ constexpr tuple(allocator_arg_t, const Alloc& a, pair<U1, U2>&&);  // tuple èµå¼ constexpr tuple& operator=(const tuple&); constexpr tuple& operator=(tuple&&) noexcept(see below ); template <class... UTypes> constexpr tuple& operator=(const tuple<UTypes...>&); template <class... UTypes> constexpr tuple& operator=(tuple<UTypes...>&&); template <class U1, class U2> constexpr tuple& operator=(const pair<U1, U2>&); // ä» å½ sizeof...(Types) == 2 template <class U1, class U2> constexpr tuple& operator=(pair<U1, U2>&&); // ä» å½ sizeof...(Types) == 2  // tuple äº¤æ¢ constexpr void swap(tuple&) noexcept(/* æ¡ä»¶æ§ */); };