IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C++11 新特性 -> 正文阅读

[数据结构与算法]C++11 新特性

目录

1 常用特性

1.1 新类型

1.2 初始化

(1)初始化列表

(2)防止缩窄转换

(3)std::initializer_list

1.3?声明

(1)auto

(2)decltype

(3)using =

(4)nullptr

(5)返回类型后置

1.4?智能指针


1 常用特性

1.1 新类型

整形

  • long long
  • unsigned long long

字符型

  • char16_t? ? ? ? 支持16位字符表示
  • char32_t? ? ? ?支持32位字符表示

1.2 初始化

(1)初始化列表

扩大了使用 { } 初始化列表的应用范围,可以用于所有内置类型和用户定义的类型。

short words[5] {1,2,3,4,5};
int a = {3};

创建对象时可以利用 { } 括起来的列表调用构造函数。

(2)防止缩窄转换

利用初始化列表编译器可以防止进行缩窄转换,相较于之前的操作具有更好的安全性。

但是允许转换为更宽的类型。

(3)std::initializer_list

initializer_list可用作构造函数的参数,属于STL模板型,具有begin()和end()操作。

可以作为函数的参数(除了构造函数外还可以用于普通函数)。

// Constructor function
vector<int> a{1, 2, 3};   //3 elements set to 1,2,3
// Function paraments of general function
int main() {
    double total = sum({1, 2, 3, 4});
}
double sum(std::initializer_list<int> i) {
    // Here can use begin() and end() to operator ...
}

1.3?声明

(1)auto

自动类型推断

(2)decltype

将变量的类型声明为表达式的类型。

// a same type as x*y.
decltype (x*y) a;

(3)using =

别名创建和声明。

using 具有和?typedef 同样的作用,均可以对复杂的标志符创建较为简单的别名。且using可用于模板部分具体化,但typedef没有给作用。

typedef std::vector<std::string>::iterator itType;
using itType = std::vector<std::string>::iterator;
template<typename T>
using arr = std::array<T, 12>;

// 旧语法的具体化模板
std::array<std::string, 12> a1;
std::array<double, 12> a2;

// 新语法模板具体化
arr<std::string> a1;
arr<double> a2;

(4)nullptr

nullptr表示空指针,不同于旧版本的NULL。

(5)返回类型后置

template<typename T, typename U>
auto func(T t, U u) -> decltype(T*U)
{
    ... 返回类型为 T*U
}

可以有效解决当编译器刚开始遇到func时并没有局部变量T和U,所有不知道返回类型,在后面使用了返回类型后置和decltype之后可以有效的额解决该问题。

1.4?智能指针

unique_ptr

shared_ptr

weak_ptr

所有的智能指针均可以和STL的移动语义协同工作。

1.5 作用域内枚举

使用了 class 和 struct 定义。同时需要显式限定,避免冲突。

作用域内枚举可以在作用域内有相同的枚举子集,只要通过显式的限定就可以避免冲突,叫之前标准更加的灵活和安全。

1.6 类的修改

(1)显示构造函数转换

explicit用于禁止单参数构造函数导致的自动转换。

通过explicit修饰后只能显示转换(也就是构造函数只能传入和声明的参数类型一样的值)。

(2)类内成员初始化

新标准可以在类的内部对成员进行初始化(成员函数和成员变量)。

class TEST
{
    int var1 = 10;
    double var2 {124.23};
    int var3;
public:
    TEST() {}
    TEST(int s) : var3(s) {}
}

1.7 模板和STL的修改

(1)基于范围的for循环

(2)新的STL容器

  • forward_list? ? ? ? 单向链表,list为双向链表
  • unordered_map
  • unordered_multimap
  • unordered_set
  • unordered_multiset
  • array? ? ? ? 固定长度,不能修改容器的大小。

(3)新的STL方法

  • cbegin()? ? ? ?指向容器第一个元素的后面,视元素为const。
  • cend()
  • crbegin()
  • crend()

(4)valarray/export/尖括号

1.8 右值引用

传统引用称为左值引用,使得标识符关联到左值。左值是一个表示数据的额表达式,程序可以获取其地址,但是const修饰后,使得不能赋值,但是可以获取地址。

右值引用使用 && 表示,右值引用可以关联到右值,可以出现在赋值表达式右边,但不能对其应用地址运算符的值。右值包括字面常量、表达式及返回值的函数。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 14:04:31  更:2021-10-07 14:06:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:31:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码