C++ ——统一初始化

本文详细介绍了C++11中的初始化列表特性,包括其在变量声明、对象构造以及new表达式中的使用。强调了列表初始化能避免类型缩窄,并通过示例展示了如何利用初始化列表创建STL容器,如vector。同时,还讨论了initializer_list模板类在函数参数中的应用。

C++11扩大了用大括号括起的列表(初始化列表)的适用范围,时期可用于所有内置类型和用户定义的类型(即类对象)。使用列表初始化时,可添加=,也可以不添加。例如:

int x={
   
   5};
double y {
   
   2.75};
short quar [5] {
   
   4,5,2,76,1};

另外,列表初始化语法也可以用于new表达式中:

int *ar = new int [4] {
   
   6,6,6,6};

创建对象时,也可以使用大括号(而不是圆括号)括起的列表来调用构造函数:

class test{
   
   
    private:
    	int x;
    	int y;
    	int z;
    public:
    	test(int M,int N,int Q):x(M),y(N)
### C++ 中 `vector` 的初始化方法 在 C++ 编程语言中,`std::vector` 是一种动态数组容器,提供了灵活的方式来存储和管理据集合。以下是关于如何在 C++初始化 `vector` 的详细介绍。 #### 使用默认构造函 可以通过不带参的方式调用默认构造函来创建一个空的 `vector` 容器。这种方式适用于需要后续逐步填充元素的情况。 ```cpp std::vector<double> values; // 创建一个空的 double 类型 vector[^1] ``` #### 利用初始值列表进行初始化 当已知要存储的具体值时,可以直接利用初始值列表完初始化操作。需要注意的是,在现代 C++ (C++11 及以上版本) 中推荐使用花括号 `{}` 而非方括号 `[]` 来包裹这些初值。 ```cpp std::vector<int> Arrs {1, 2, 3, 4, 5, 6, 7, 8, 9}; // 初始化向量[^1] ``` #### 复制指定范围内的元素至新 vector 如果已有另一个序列或者子集希望被复制新的独立副本,则可通过提供两个迭代器分别指向起始位置与结束前一单位处实现这一目标。 ```cpp std::vector<int>::const_iterator first1 = Arrs.begin() + 2; std::vector<int>::const_iterator last1 = Arrs.end() - 1; std::vector<int> Arrs2(first1, last1); // 新建包含原向量部分切片的新向量[^1] ``` #### 设置固定长度及统一赋值 对于某些特定场景下要求预先设定好容量并且赋予相同初始值的情形而言,下面这种方法尤为适用——只需给出所需量以及对应的单个重复项即可满足需求。 ```cpp std::vector<float> Arrs3(5, 6.0f); // 构造含五个浮点且均设为6.0的向量 ``` #### 结合结构体或类的对象作为元素类型 除了基本的据类型之外,还可以把自定义的据结构比如结构体(struct)也当作 vector 元素来进行处理。只要该类型支持拷贝语义,默认情况下就能顺利运作而无需额外配置。 ```cpp struct Point { double x; double y; double z; }; std::vector<Point> points = {{1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}}; // 自动推导出适合的尺寸并逐字段匹配赋值[^2] ``` #### 动态调整大小并通过外部指针访问内存区域 尽管通常建议优先采用 STL 提供的功能接口而非手动操控底层资源,但在特殊场合确实有必要的话也可以借助 new 关键字配合矩阵等复杂嵌套形式达目的。 ```cpp void init_arr(std::vector<std::vector<int>>& matrix){ int row = matrix.size(); int* array = new int[row]; } // 注意此处仅展示概念并未实际释放分配的空间,请务必遵循 RAII 原则妥善管理生命周期[^4] ``` 综上所述,无论是在简单情形还是较为复杂的定制化需求面前,C++ 都为我们准备好了丰富的工具箱以应对各种挑战!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值