本篇 ShengYu 介紹 C++ std::tuple 用法與範例,C++ std::tuple 是一個用來存放不同資料類型的容器,該儲存空間可以透過 std::get
來進行存取,例如:對一個 tuple t 變數的話,可以用 get<i>(t)
取得該 tuple 裡各型別的變數,用 get<1>(t)
就取得第一個變數,用 get<2>(t)
就取得第二個變數,依此類推。通常 tuple 用於需要從函數回傳多不同資料類型的情況,接下來看看 std::tuple 用法範例。
要使用 std::tuple 的話,需要引入的標頭檔: <tuple>
C++ 建立 tuple
C++ 的 tuple 它可以容納不同類型的元素。以下是建立 tuple 的範例,1
2
3
4
5
6
7
8
9// g++ std-tuple.cpp -o a.out
int main() {
std::tuple<int, double, std::string> myTuple(100, 3.14, "hello world");
return 0;
}
取得 tuple 元素
C++ std::tuple 可以透過 std::get
來進行存取,範例如下,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19// g++ std-tuple2.cpp -o a.out
int main() {
std::tuple<int, double, std::string> myTuple(100, 3.14, "hello world");
std::cout << std::get<0>(myTuple) << "\n";
std::cout << std::get<1>(myTuple) << "\n";
std::cout << std::get<2>(myTuple) << "\n";
int value1 = std::get<0>(myTuple); // 取得第一個元素
double value2 = std::get<1>(myTuple); // 取得第二個元素
std::string value3 = std::get<2>(myTuple); // 取得第三個元素
std::cout << value1 << "\n";
std::cout << value2 << "\n";
std::cout << value3 << "\n";
return 0;
}
輸出如下,1
2
3
4
5
6100
3.14
hello world
100
3.14
hello world
您可以使用 std::get() 或在 C++17 及更高版本中使用結構化綁定來訪問 tuple 的元素,1
2
3
4
5
6
7
8std::tuple<int, double, std::string> myTuple(100, 3.14, "hello world");
// 使用結構化綁定(C++17及更高版本)
auto [a, b, c] = myTuple; // 自動將 tuple 中的元素綁定到變數 x, y, z
std::cout << a << "\n";
std::cout << b << "\n";
std::cout << c << "\n";
修改 tuple 元素
要修改 tuple 元素需要使用 std::get
的方式來進行修改,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// g++ std-tuple3.cpp -o a.out
int main() {
std::tuple<int, double, std::string> myTuple(100, 3.14, "hello world");
std::get<0>(myTuple) = 123; // 修改第一個元素的值
std::get<1>(myTuple) = 5.43; // 修改第二個元素的值
std::get<2>(myTuple) = "world"; // 修改第三個元素的值
std::cout << std::get<0>(myTuple) << "\n";
std::cout << std::get<1>(myTuple) << "\n";
std::cout << std::get<2>(myTuple) << "\n";
return 0;
}
輸出如下,1
2
3123
5.43
world
解包 tuple 元素到變數
使用 std::tie
解包 std::tuple
到變數,1
2
3
4
5
6
7
8
9
10
11
12
13// g++ std-tuple4.cpp -o a.out
int main() {
std::tuple<int, double, std::string> myTuple(100, 3.14, "hello world");
int a;
double b;
std::string c;
std::tie(a, b, c) = myTuple;
return 0;
}
同常使用情況為函式回傳 std::tuple
時,這樣可以直接用 std::tie
將變數接收 std::tuple
的元素值,要用 std::tie
的話也是同樣引用 tuple 的標頭檔 <tuple>
,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20// g++ std-tuple5.cpp -o a.out
std::tuple<int, int, std::string> getStudent() {
return std::make_tuple(100, 18, "Tom");
}
int main() {
int id;
int age;
std::string name;
std::tie(id, age, name) = getStudent();
std::cout << "id: " << id
<< ", age: " << age
<< ", name: " << name << "\n";
return 0;
}
輸出如下:1
id: 100, age: 18, name: Tom
取得 tuple 元素數量
你可以使用 std::tuple_size
來取得 tuple 的元素數量。1
size_t tupleSize = std::tuple_size<decltype(myTuple)>::value;
詳細範例如下,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// g++ std-tuple6.cpp -o a.out
int main() {
std::tuple<int, double, std::string> t1;
std::tuple<int, double, std::string> t2(100, 3.14, "hello world");
size_t s1 = std::tuple_size<decltype(t1)>::value;
size_t s2 = std::tuple_size<decltype(t2)>::value;
std::cout << s1 << "\n";
std::cout << s2 << "\n";
return 0;
}
輸出如下:1
23
3
使用 std::make_tuple 建立 tuple
1 | // g++ std-tuple7.cpp -o a.out |
tuple 比較
如果 tuple 的元素類型支援比較,則 tuple 就可支援比較操作。您可以使用 ==
、!=
、<
、<=
、>
和 >=
運算子來比較兩個 tuple,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30// g++ std-tuple8.cpp -o a.out
int main() {
std::tuple<int, double> tuple1 = std::make_tuple(100, 3.14);
std::tuple<int, double> tuple2 = std::make_tuple(100, 3.14);
std::tuple<int, double> tuple3 = std::make_tuple(100, 4.56);
std::tuple<int, double> tuple4;
if (tuple1 == tuple2) {
std::cout << "與 tuple2 相等\n";
} else {
std::cout << "與 tuple2 不相等\n";
}
if (tuple1 == tuple3) {
std::cout << "與 tuple3 相等\n";
} else {
std::cout << "與 tuple3 不相等\n";
}
if (tuple1 == tuple4) {
std::cout << "與 tuple4 相等\n";
} else {
std::cout << "與 tuple4 不相等\n";
}
return 0;
}
輸出如下:1
2
3與 tuple2 相等
與 tuple3 不相等
與 tuple4 不相等
以上就是 C++ std::tuple 用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!
其它相關文章推薦
C/C++ 新手入門教學懶人包
std::string 用法與範例
std::vector 用法與範例
std::sort 用法與範例
std::map 用法與範例
std::set 用法與範例