C/C++语言基础--initializer_list表达式、tuple元组、pair对组简介 ...

打印 上一主题 下一主题

主题 806|帖子 806|积分 2418

本专栏目标


  • 更新C/C++的基础语法,包括C++的一些新特性
前言


  • initializer_list表达式、tuple元组、pair对组再C++一样平常照旧比力常用的,尤其是对组在刷算法照旧挺好用的,这里做一个简介;
  • 这三个语法团结C++17的结构化绑定会更好用,结构化绑定背面会更新;
  • C语言背面也会继续更新知识点,如内联汇编;
  • 欢迎收藏 + 关注,本人将会持续更新。

  
std::initializer_list

为了编写能够处理不同数量实参,但是类型相同,C++11新标准提供了std::initializer_list的方法,它提供了一种方便的方式来初始化容器或实行其他形式的初始化。std::initializer_list 紧张用于构造函数和其他函数的参数列表中,允许使用大括号 {} 困绕的初始化列表来传递多个元素。


  • 普通函数使用
  1. void showMsg(const std::initializer_list<std::string>& list)
  2. {
  3.         for (auto& n : list)
  4.         {
  5.                 cout << n << " ";
  6.         }
  7.         cout << endl;
  8. }
  9. showMsg({ "hello","world","嘿嘿"});
复制代码


  • 构造函数使用
  1. template<typename T,size_t _size>
  2. class Array
  3. {
  4. public:
  5.         Array() {}
  6.         Array(const std::initializer_list<T>& list)
  7.         {
  8.                 size_t i = 0;
  9.                 for (auto& v : list)   //必须使用这个
  10.                 {
  11.                         _arr[i++] = v;
  12.                 }
  13.         }
  14.         constexpr size_t size()const { return _size; }
  15.         T& operator[](int index)
  16.         {
  17.                 return _arr[index];
  18.         }
  19.         T _arr[_size]{ T() };
  20. };
  21. Array<int, 10> arr = { 1,2,3,4,5,6 };
  22. for (int i = 0; i < arr.size(); i++)
  23. {
  24.         cout << arr[i] << " ";
  25. }
复制代码
注意: 这个表达式只允许读,不允许修改里面元素
相对于数组:语法简单,可以支持{}初始化,也更安全了。
使用步调

1、用花括号初始化器列表列表初始化一个对象,其中对应构造函数担当一个std::initializer_list 参数
2、以花括号初始化器列表为赋值的右运算数,或函数调用参数,而对应的赋值运算符/函数担当 std::initializer_list 参数
3、绑定花括号初始化器列表到 auto ,包括在范围 for 循环中
std::tuple

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表