赞
踩
tuple是C++11中引入的新类型,中文翻译就是元组。元组是一个能够容纳元素集合的对象。 每个元素可以具有不同的类型。类模板std :: tuple是固定大小的异构值集合。具体可以参考tuple-cppreference.com和tuple-cplusplus.com中的描述,并且提供了一些示例程序。
在使用tuple之前需要导入对应的头文件:
#include<tuple>
tuple的原型声明如下:
template< class... Types >
class tuple; (C++11)
其中,tuple-cplusplus.com中提供的示例程序如下:
// tuple example #include <iostream> // std::cout #include <tuple> // std::tuple, std::get, std::tie, std::ignore int main () { std::tuple<int,char> foo (10,'x'); auto bar = std::make_tuple ("test", 3.1, 14, 'y'); std::get<2>(bar) = 100; // access element int myint; char mychar; std::tie (myint, mychar) = foo; // unpack elements std::tie (std::ignore, std::ignore, myint, mychar) = bar; // unpack (with ignore) mychar = std::get<3>(bar); std::get<0>(foo) = std::get<2>(bar); std::get<1>(foo) = mychar; std::cout << "foo contains: "; std::cout << std::get<0>(foo) << ' '; std::cout << std::get<1>(foo) << '\n'; return 0; }
OutPut:
foo contains: 100 y
C++中使用tuple和pair可以返回多个不同类型的多个值。示例程序如下:
#include<bits/stdc++.h> using namespace std; // A Method that returns multiple values using // tuple in C++. tuple<int, int, char> foo(int n1, int n2) { // Packing values to return a tuple return make_tuple(n2, n1, 'a'); } // A Method returns a pair of values using pair std::pair<int, int> foo1(int num1, int num2) { // Packing two values to return a pair return std::make_pair(num2, num1); } int main() { int a,b; char cc; // Unpack the elements returned by foo tie(a, b, cc) = foo(5, 10); // Storing returned values in a pair pair<int, int> p = foo1(5,2); cout << "Values returned by tuple: "; cout << a << " " << b << " " << cc << endl; cout << "Values returned by Pair: "; cout << p.first << " " << p.second; return 0; }
Output
Values returned by tuple: 10 5 a
Values returned by Pair: 2 5
tuple是可以容纳许多元素的独享。元素可以是不同的数据类型。元组中的元素被初始化为参数,以便可以访问它们。
// C++ code to demonstrate tuple, get() and make_pair() #include<iostream> #include<tuple> // for tuple using namespace std; int main() { // Declaring tuple tuple <char, int, float> geek; // Assigning values to tuple using make_tuple() geek = make_tuple('a', 10, 15.5); // Printing initial tuple values using get() cout << "The initial values of tuple are : "; cout << get<0>(geek) << " " << get<1>(geek); cout << " " << get<2>(geek) << endl; // Use of get() to change values of tuple get<0>(geek) = 'b'; get<2>(geek) = 20.5; // Printing modified tuple values cout << "The modified values of tuple are : "; cout << get<0>(geek) << " " << get<1>(geek); cout << " " << get<2>(geek) << endl; return 0; }
输出:
The initial values of tuple are : a 10 15.5
The modified values of tuple are : b 10 20.5
在以上代码中,get()修改tuple的第1个和第3个值。
//C++ code to demonstrate tuple_size #include<iostream> #include<tuple> // for tuple_size and tuple using namespace std; int main() { // Initializing tuple tuple <char,int,float> geek(20,'g',17.5); // Use of size to find tuple_size of tuple cout << "The size of tuple is : "; cout << tuple_size<decltype(geek)>::value << endl; return 0; }
输出:
The size of tuple is : 3
//C++ code to demonstrate swap() #include<iostream> #include<tuple> // for swap() and tuple using namespace std; int main() { // Initializing 1st tuple tuple <int,char,float> tup1(20,'g',17.5); // Initializing 2nd tuple tuple <int,char,float> tup2(10,'f',15.5); // Printing 1st and 2nd tuple before swapping cout << "The first tuple elements before swapping are : "; cout << get<0>(tup1) << " " << get<1>(tup1) << " " << get<2>(tup1) << endl; cout << "The second tuple elements before swapping are : "; cout << get<0>(tup2) << " " << get<1>(tup2) << " " << get<2>(tup2) << endl; // Swapping tup1 values with tup2 tup1.swap(tup2); // Printing 1st and 2nd tuple after swapping cout << "The first tuple elements after swapping are : "; cout << get<0>(tup1) << " " << get<1>(tup1) << " " << get<2>(tup1) << endl; cout << "The second tuple elements after swapping are : "; cout << get<0>(tup2) << " " << get<1>(tup2) << " " << get<2>(tup2) << endl; return 0; }
输出:
The first tuple elements before swapping are : 20 g 17.5
The second tuple elements before swapping are : 10 f 15.5
The first tuple elements after swapping are : 10 f 15.5
The second tuple elements after swapping are : 20 g 17.5
// C++ code to demonstrate working of tie() #include<iostream> #include<tuple> // for tie() and tuple using namespace std; int main() { // Initializing variables for unpacking int i_val; char ch_val; float f_val; // Initializing tuple tuple <int,char,float> tup1(20,'g',17.5); // Use of tie() without ignore tie(i_val,ch_val,f_val) = tup1; // Displaying unpacked tuple elements // without ignore cout << "The unpacked tuple values (without ignore) are : "; cout << i_val << " " << ch_val << " " << f_val; cout << endl; // Use of tie() with ignore // ignores char value tie(i_val,ignore,f_val) = tup1; // Displaying unpacked tuple elements // with ignore cout << "The unpacked tuple values (with ignore) are : "; cout << i_val << " " << f_val; cout << endl; return 0; }
输出:
The unpacked tuple values (without ignore) are : 20 g 17.5
The unpacked tuple values (with ignore) are : 20 17.5
// C++ code to demonstrate working of tuple_cat() #include<iostream> #include<tuple> // for tuple_cat() and tuple using namespace std; int main() { // Initializing 1st tuple tuple <int,char,float> tup1(20,'g',17.5); // Initializing 2nd tuple tuple <int,char,float> tup2(30,'f',10.5); // Concatenating 2 tuples to return a new tuple auto tup3 = tuple_cat(tup1,tup2); // Displaying new tuple elements cout << "The new tuple elements in order are : "; cout << get<0>(tup3) << " " << get<1>(tup3) << " "; cout << get<2>(tup3) << " " << get<3>(tup3) << " "; cout << get<4>(tup3) << " " << get<5>(tup3) << endl; return 0; }
输出:
The new tuple elements in order are : 20 g 17.5 30 f 10.5
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。