initializer_list不能修改,更符合参数的特点。 initializer_list是指针语义,性能高; vector是值语义, vector有push_back函数,也就是说vector可以在函数里面修改,所以必然vector必须在heap上分配空间来存储数据。 而initializer_list只有begin和end函数,函数内并不能修改它,所以编译器有机会在stack上存储initializer_list的...
C++11中 的vector,是 通过新增的构造函数的方式 使用 initializer_list 进行初始化 2. 引用 左值引用 左值引用就是给左值取别名 左值是一个数据的表达式(如变量名或者引用指针) 可以获取它的地址 即为左值 左值出现赋值符号的左边 (也可出现在右边) 右值引用 右值也是一个表示数据的表达式(如字面常量、表达式返回...
首先有了initializer_list之后,对于STL的container的初始化就方便多了,比如以前初始化一个vector需要这样: inta[] = {0,1,2,3}; std::vector<int> vec(a, a+sizeof(a)); 或者 std::vector<int>vec; vec.push_back(1); vec.push_back(3); vec.push_back(3); vec.push_back(2); 有了initialize...
我们之前不是模拟实现过STL里面的各种容器的,那以vector为例,我们来对它改造一下,让它也支持用initializer_list进行{}初始化和赋值。 怎么做呢?给它增加这个构造函数就行了 🆗,每增加之前我们自己的vector肯定是不行的,而且大家看这个报错,编译器自动就把后面的常量数组识别成initializer list类型了 我们来写一下...
std::vector<int>a{1,2,3,4,5}; 或者 std::vector<int>a = {1,2,3,4,5}; 这里用到了一个新的类型,即initializer_list,包含在标准库头文件中。 优点 在C++11以前,如果要初始化一个vector,需要这样做 std::vector<int>a; a.push_back(1); ...
initializer_list表示某种特定类型的值的数组,类似于vector,它是一种模板类型,使用的时候需要说明所含元素的类型。 voidtest(initializer_list<string>il){}intmain(){test({"0","HELLO"});test({"here","HELLO","111"});} 我们注意到,initilizer_list在使用的过程中,它的参数类型得是一样的(当然,后面会...
我们vector容器构造函数的参数是std::initializer_list,这里是调用initializer_list的vector构造函数 struct Point{//explicit Point(int x, int y)//调用后,可不让其隐式类型转换Point(int x, int y):_x(x),_y(y){cout << "Point(int x, int y)" << endl;}int _x;int _y;};int main(){ /...
(vector,list,map…)就 增加std::initializer_list作为参数的构造函数 ,这样初始化容器对象就更方便了 2 std::initializer_list也可以作为operator=的参数 ,这样就可以用大括号赋值 三.对比【C++11特性{ }的隐式类型转换】&【调用initializer_list的vector构造函数】不同原理 ● C++11中新增的关于{}用法 (...
我们看一下vector源码: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 vector& operator=(initializer_list<value_type> __l) { this->assign(__l.begin(), __l.end()); return *this; } iterator insert(const_iterator __position, initializer_list<value_type> __l) { return this->insert(...
首先有了initializer_list之后,对于STL的container的初始化就方便多了,比如以前初始化一个vector需要这样: int a[] = {0, 1, 2, 3}; std::vector<int> vec(a, a+sizeof(a)); 1. 2. 或者 std::vector<int> vec; vec.push_back(1);