C++ std::tuple 和 type_traits 使用

本文介绍了C++中的std::tuple及其常用操作,包括存放不同类型数据的功能。同时探讨了type_traits模板库的使用,帮助理解元组在C++编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ 元组

C++ std::tuple 与 python tuple 类似,可以存放不同类型的数据。

常用操作
// 模板 定义 tuple
std::tuple<int,int,std::string> t(1,2,"hello");
//tuple 大小
int size = std::tuple_size<decltype(t)>::value;
//访问
int a = std::get<0>(t);
int b = std::get<1>(t);
std::string s = std::get<2>(t);
完整例子
#include <iostream>
#include <tuple>
#include <functional>
#include <type_traits>

namespace test{
  int add(int a,int b)
  {
    return a+b;
  }
};

int test_traits()
{
  const int n = 10;
  int a = 10;
  int b = 20;
  double d = 0.209;

  std::cout << "\033[31;1mTest c++ 11 type_traits \e[0m\n";
  // std::is_same
  std::cout << "std::is_same " << std::is_same<decltype(a),decltype(b)>::value << "\n";
  std::cout << "std::is_same " << std::is_same<decltype(a),decltype(d)>::value << "\n";
  
  std::cout << "std::is_const " << std::is_const<decltype(n)>::value << "\n";
  
  typedef std::conditional<true,int,char>::type a1;
  typedef std::conditional<false,int,char>::type b1;
  std::cout << "std::is_same " << std::is_same<int,a1>::value << "\n";
  std::cout << "std::is_same " << std::is_same<int,b1>::value << "\n";
  std::cout << "std::is_same " << std::is_same<char,a1>::value  << "\n";
  std::cout << "std::is_same " << std::is_same<char,b1>::value  << "\n";

  // std::result_of
  
  std::function<int(int,int)> fn = test::add;

  std::cout << "func(1,2) " << fn(1,2) << std::endl;
  
  /*using  和 typedef 是一样 */
  // using func = int(*)(int,int);
  typedef int(*func)(int,int);
  
  
  std::cout << "std::result_of : " << std::is_same<int,std::result_of<func(int,int)>::type>::value << "\n";


  return 0;

}
int main()
{
  std::tuple<int,char,std::string> param(10,'1',"hello");
  
  //for(int i = 0; i < std::tuple_size<decltype(param)>::value; i ++){
  //  std::cout << "tuple " << i << " value :" << std::get<i>(param) << std::endl;
  //}
  
  std::cout << "\033[33;1mTest c++ 11 std::tuple \033[0m \n";
  std::cout << "tuple size : " << std::tuple_size<decltype(param)>::value << "\n";
  std::cout << "tuple value: " << std::get<0>(param) << "\n";
  std::cout << "tuple vaule: " << std::get<1>(param) << "\n";
  std::cout << "tuple value: " << std::get<2>(param) << "\n";

  // std::tuple_element
  std::tuple_element<1,decltype(param)>::type t;

  t = std::get<1>(param);
  std::cout << "t value : " << t << "\n";

  test_traits();
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值