c语言最新标准c22,C++20标准(c++标准手册) 官方最新版PDF

C++20(C++ 编程语言标准2020版)将是C++ 语言一次非常重大的更新,将为这门语言引入大量新特性。c++20标准文档是官方目前最新文件,更新2020年。需要的朋友可下载试试!

此次更新看 C++20 的 Big Four(四大新特性:概念、范围、协程和模块)以及核心语言(包括一些新的运算符和指示符)。

全新的 GCC、Clang 和 EDG 编译器能提供对核心语言的最佳支持。此外,MSVC 和 Apple Clang 编译器也支持许多 C++20 特性。

C++20 核心语言特征。

库方面的情况类似。GCC 在库方面的支持最好,接下来是 Clang 和 MSVC 编译器。

C++20 库特征。

上面的截图仅展示了对应表格的前面一部分,可以看出这些编译器的表现并不是非常令人满意。即使你使用的是全新的编译器,这些编译器仍然不支持很多新特性

四大新特性

概念(concept)

使用模板进行通用编程的关键思想是定义能通过各种类型(type)使用的函数和类。但是,在实例化模板时经常会出现用错类型的问题,其结果通常是几页难懂的报错信息。

现在概念来了,这个问题可以休矣。概念让你能为模板编写要求,而编译器则可以检查这个要求。概念革新了我们思考和编写通用代码的方式。

范围库(Ranges Library)

范围库是概念的首个客户。它支持的算法满足以下条件:

可以直接在容器上操作;无需迭代器指定一个范围;

可以宽松地评估;

可以组合。

简单来说:范围库支持函数模式(functional patterns)。

协程(Coroutines)

协程是广义的函数,能在保持状态的同时暂停或继续。协程通常用来编写事件驱动型应用。事件驱动型应用可以是模拟、游戏、服务器、用户接口或算法。协程也通常被用于协作式多任务(cooperative multitasking)。

我们这里不介绍 C++20 的具体协程,而会介绍编写协程的框架。编写协程的框架由 20 多个函数构成,其中一部分需要你去实现,另一部分则可能需要重写。因此,你可以根据需求调整协程。

模块(Module)

模块部分简单介绍一下就好。模块承诺能够实现:

更快的编译时间;

宏的隔离;

表达代码的逻辑结构;

不必再使用头文件(header file);

摆脱丑陋的宏方法。

35d8b660df4874079019e2a79f45de6d.png

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
矩阵乘法是一个非常重要的数学运算,在计算机科学中也经常被用到。分治法可以用来求解矩阵乘法,其基本思路是将矩阵分成较小的子矩阵,然后对这些子矩阵进行乘法运算,最终得到原始矩阵的乘积。 以下是C++实现矩阵乘法的分治算法的代码: ```c++ #include <iostream> #include <vector> using namespace std; // 分治法求解矩阵乘法 vector<vector<int>> matrixMultiply(vector<vector<int>>& A, vector<vector<int>>& B) { int n = A.size(); vector<vector<int>> C(n, vector<int>(n, 0)); if (n == 1) { C[0][0] = A[0][0] * B[0][0]; } else { vector<vector<int>> A11(n/2, vector<int>(n/2, 0)); vector<vector<int>> A12(n/2, vector<int>(n/2, 0)); vector<vector<int>> A21(n/2, vector<int>(n/2, 0)); vector<vector<int>> A22(n/2, vector<int>(n/2, 0)); vector<vector<int>> B11(n/2, vector<int>(n/2, 0)); vector<vector<int>> B12(n/2, vector<int>(n/2, 0)); vector<vector<int>> B21(n/2, vector<int>(n/2, 0)); vector<vector<int>> B22(n/2, vector<int>(n/2, 0)); // 将原始矩阵分成四个子矩阵 for (int i = 0; i < n/2; i++) { for (int j = 0; j < n/2; j++) { A11[i][j] = A[i][j]; A12[i][j] = A[i][j+n/2]; A21[i][j] = A[i+n/2][j]; A22[i][j] = A[i+n/2][j+n/2]; B11[i][j] = B[i][j]; B12[i][j] = B[i][j+n/2]; B21[i][j] = B[i+n/2][j]; B22[i][j] = B[i+n/2][j+n/2]; } } // 递归求解子问题 vector<vector<int>> C11 = matrixMultiply(A11, B11) + matrixMultiply(A12, B21); vector<vector<int>> C12 = matrixMultiply(A11, B12) + matrixMultiply(A12, B22); vector<vector<int>> C21 = matrixMultiply(A21, B11) + matrixMultiply(A22, B21); vector<vector<int>> C22 = matrixMultiply(A21, B12) + matrixMultiply(A22, B22); // 合并结果 for (int i = 0; i < n/2; i++) { for (int j = 0; j < n/2; j++) { C[i][j] = C11[i][j]; C[i][j+n/2] = C12[i][j]; C[i+n/2][j] = C21[i][j]; C[i+n/2][j+n/2] = C22[i][j]; } } } return C; } int main() { vector<vector<int>> A {{1, 2}, {3, 4}}; vector<vector<int>> B {{5, 6}, {7, 8}}; vector<vector<int>> C = matrixMultiply(A, B); for (int i = 0; i < C.size(); i++) { for (int j = 0; j < C.size(); j++) { cout << C[i][j] << " "; } cout << endl; } return 0; } ``` 在这个实现中,我们首先检查矩阵的大小。如果矩阵大小为1,则直接计算乘积并返回结果。否则,我们将矩阵分成四个子矩阵,然后递归求解每个子问题。最后,我们将四个子矩阵的结果合并为一个结果矩阵。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值