首页 > 其他分享 >initializer_list

initializer_list

时间:2024-05-16 22:52:00浏览次数:14  
标签:std 初始化 元素 list initializer lst

一:作用

std::initializer_list 是 C++11 引入的一个新特性,它允许你在函数参数中传递一个花括号 {} 初始化的列表。这个列表是临时的,并且主要用于初始化数组、容器或其他需要多个初始值的对象,函数实参数量未知且全部实参类型都是相同的。

例子:

#include <iostream>  
#include <initializer_list>  
  
// 函数接受一个 int 类型的 initializer_list  
void print_numbers(std::initializer_list<int> nums) 
{  
    for (int num : nums) {  
        std::cout << num << ' ';  
    }  
    std::cout << '\n';  
}  
  
int main() 
{  
    // 使用花括号 {} 初始化一个 int 类型的 initializer_list  
    // 这个列表包含任意数量的 int 元素  
    print_numbers({1, 2, 3, 4, 5}); // 可以传递5个int  
    print_numbers({6, 7, 8});       // 可以传递3个int  
    print_numbers({});              // 甚至可以传递一个空的列表  
    return 0;  
}

注意:initializer_list对象元素永远是只读的(不可修改),不能保存引用或指针,其生命周期与它的作用域相同。

三、初始化方式

  • 默认初始化
std::initializer_list<T> lst;
  • 列表初始化
std::initializer_list<T> lst{1,2,3,4,5};
  • 拷贝初始化
std::initializer_list<int> lst1{1,2,3,4,5};
std::initializer_list<int> lst2(lst1);
  • 赋值初始化
std::initializer_list<int> lst3;
lst3 = lst1;

四、其他操作

initializer_list也是模板类型,用法于vector相似

  • 列表中的元素数量
lst.size();
  • 首元素指针和尾元素的下一个位置
lst.begin();
lst.end();

五、优点和缺点

优点

  1. 灵活性和扩展性:
    std::initializer_list 可以用于任何需要可变数量参数的函数中,提供了高度的灵活性和扩展性。你可以编写一个接受 std::initializer_list 参数的函数,使其能够接受任意数量的元素进行初始化。
  2. 兼容性:
    std::initializer_list 可以与现有的容器(如 std::vector、std::array、std::list 等)一起使用,使它们能够更容易地接受初始化列表。

缺点:

  1. 不支持动态大小调整:
    一旦使用 std::initializer_list 初始化一个对象,其大小将被确定,并且不能再进行动态大小调整。这意味着你不能像使用其他容器(如 std::vector)那样在运行时添加或删除元素。

  2. 只读性:
    std::initializer_list 是一个只读的容器,不支持添加、删除或修改元素。你只能遍历它并访问其元素。

  3. 临时性:
    std::initializer_list 对象通常是临时的,并且只在创建它们的代码块中存在。这可能会限制其使用范围,特别是在需要长时间保留或跨多个函数传递初始化列表的情况下。

标签:std,初始化,元素,list,initializer,lst
From: https://www.cnblogs.com/baobaobashi/p/18196929

相关文章

  • C++ 初始化列表(Initialization List)
    请注意以下继承体系中各class的constructors写法:1classCPoint2{3public:4CPoint(floatx=0.0)5:_x(x){}67floatx(){return_x;}8voidx(floatxval){_x=xval;}9protected:10float_x;11};1213classCPoint2d:......
  • openGauss curosr-executemany_query-vars_list
    curosr.executemany(query,vars_list)功能描述此方法执行SQL命令所有参数序列或序列中的SQL映射。原型curosr.executemany(query,vars_list)参数表1curosr.executemany参数关键字参数说明query待执行的SQL语句。vars_list变量列表,匹配query中%s占位符。......
  • openGauss cursor-execute-query-vars_list
    cursor.execute(query,vars_list)功能描述此方法执行被参数化的SQL语句(即占位符,而不是SQL文字)。psycopg2模块支持用%s标志的占位符。原型curosr.execute(query,vars_list)参数表1curosr.execute参数关键字参数说明query待执行的sql语句。vars_list变量列......
  • LeetCode 1669. Merge In Between Linked Lists
    原题链接在这里:https://leetcode.com/problems/merge-in-between-linked-lists/description/题目:Youaregiventwolinkedlists: list1 and list2 ofsizes n and m respectively.Remove list1'snodesfromthe ath nodetothe bth node,andput list2 in......
  • redis之list类型
    在redis中,list类型是一种有序的字符串元素集合。redis的list和python中的列表类型有一些相似之处,但也有一些不同点redis列表类型的特点有序性:列表中的元素是按照插入顺序存储的,每个元素都有一个索引位置。允许重复元素:列表中可以包含重复的元素。支持头部和尾部的操作:Redis......
  • list
    文档链接list与vectorlist优点list头部、中间插入不再需要挪动数据插入数据是新增节点,不需要增容缺点不支持随机访问vector优点支持下标的随机访问,间接的就很好的支持排序、二分查找、堆算法等缺点头部和中间插入删除效率低插入数据时空间不够需要增容......
  • ArrayList和LinkedList区别
    底层数据结构ArrayList是动态数组的数据结构实现。LinkedList是双向链表的数据结构实现。效率下标査询ArrayList按照下标査询的时间复杂度O(1)。LinkedList不支持下标查询。查找(未知索引)ArrayList需要遍历,链表也需要链表,时间复杂度都是O(n)。新增和删除ArrayL......
  • Java把List集合转成树形结构
     代码如下:privatestatic<T,K>List<T>listToTree(List<T>list,Predicate<T>isTop,Function<?superT,?extendsK>getId,Function<?superT,?extendsK>getParentId,BiConsumer<T,List<T>>setChilds){......
  • Spring源码分析:List集合注入
    pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://ma......
  • 数组和List互转
    数组转List数组转List,使用JDK中java.util.Arrays工具类的asList方法。importjava.util.Arrays;importjava.util.List;publicclassMain{publicstaticvoidmain(String[]args){String[]strs={"aaa","bbb","ccc"};List......