C++11 新特性之initializer_list
2022/1/31 20:12:50
本文主要是介绍C++11 新特性之initializer_list,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++新特性之initializer_list
- 目录
- 使用目的
- 语法
- 示例代码及其讲解
目录
使用目的
1. 一致化的设初值; 2. 接收元素的可变个数
语法
//背后的实现依赖于 array template <class _Elem> class initializer_list{...};
一般情况下和template作为参数使用
如:
//使用时需要添加头文件 #include <initializer_list> template<typename T> void print(initializer_list<T>) {}
示例代码及其讲解
- 初始化值代码演示
int i; // i 没有被初始化,可能是任意值 int j{}; // j 被初始化为0 int *p; // 野指针 不安全 int *q{} // 等同于 int *q = nullptr; //c++ 2.0 之前初始化 vector std::vector<int> v; // 使用vector 要添加头文件 #include <vector> v.insert(v.end(), 1); v.insert(v.end(), 2); //现在可利用 initializer_list 进行初始化 std::vector<int> v{1,2,3};
- 接收元素可变个数代码演示
示例代码1:
#include <iostream> #include <initializer_list> template<typename T> void print(std::initializer_list<T> list) { std::cout << "print(initializer_list<T>)" << std::endl; for(auto i : list) std::cout << i << std;;endl; } //调用 int main() { print({1,2,3,4,5}); return 0; }
示例代码2:
需求:
用initializer_list
做参数找到最大值;
int max_elem = max({4,2,5,6,8})
struct less_iter_less { template<typename iter1, typename iter2> bool operator()(iter1 iter1_, iter2 iter2_) //重载() 进行比较大小 { return *iter1_ < *iter2_; } }; template<typename T> T get_max(T iter1, T iter2, less_iter_less less) //3、传进来的参数通过创建临时对象进行比较得到大小 { if(iter1 == iter2) return iter1; T MAX = iter1 ; while(++iter1 != iter2) { if(less(iter1, iter2)) { MAX = iter2; } MAX = iter1; } return MAX; } template<typename T> T max_element(T first_iterator, T last_iterator) //2、被max()函数调用,传进来initializer_list 的第一个和最后一个元素 { return get_max(first_iterator, last_iterator, less_iter_less()); //类型加() 生成临时对象 } template<typename T> T max(std::initializer_list<T> list) //1、目的函数 以initializer_list为参数 { return *max_element(list.begin(), list.end()); } int main() { std::cout << max({4,2,5,6,8}) << std::endl; return 0; }
以上是我自己在学习过程的一些心得和笔记,如有不当,欢迎指出与批评,感谢观看的各位!
这篇关于C++11 新特性之initializer_list的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03如何安装 App 并连接到飞牛 NAS?-icode9专业技术文章分享
- 2024-10-03如何安装飞牛 TV 并连接到影视服务器?-icode9专业技术文章分享
- 2024-10-03如何在PVE和ESXI上安装飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS安装系统异常情况处理-icode9专业技术文章分享
- 2024-10-03飞牛NAS如何创建存储空间?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS硬盘会自动休眠吗?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何安装飞牛影视和创建媒体库?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何为家人朋友开通影视账号?-icode9专业技术文章分享