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};
#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; }
以上是我自己在学习过程的一些心得和笔记,如有不当,欢迎指出与批评,感谢观看的各位!