手机网站开发 1433端口错误,建网站的域名是什么意思,太原公司网站开发,网站推广站群目录
1、简介
2.自动类型推导和初始化
示例代码
3.智能指针
示例代码
4.Lambda 表达式
示例代码
5.右值引用和移动语义
示例代码
6.并发编程支持
示例代码
7.其他特性
八、案例#xff1a;实现一个简单的并发下载器 上一篇文章#xff1a; C标准模板库#xff…
目录
1、简介
2.自动类型推导和初始化
示例代码
3.智能指针
示例代码
4.Lambda 表达式
示例代码
5.右值引用和移动语义
示例代码
6.并发编程支持
示例代码
7.其他特性
八、案例实现一个简单的并发下载器 上一篇文章 C标准模板库STL是C的一个重要组成部分它提供了一套丰富的通用数据结构和算法。STL以其高度模块化、可复用的特性在C编程中发挥着重要作用。本篇博客将带你深入了解STL并介绍其常见的组件和使用方法。 C学习笔记——标准模板库-CSDN博客C标准模板库STL是C的一个重要组成部分它提供了一套丰富的通用数据结构和算法。STL以其高度模块化、可复用的特性在C编程中发挥着重要作用。本篇博客将带你深入了解STL并介绍其常见的组件和使用方法。C标准模板库STL是C语言的一个标准库它提供了一套通用的数据结构和算法以支持高效的编程。STL的设计目标是使程序员能够以简洁、高效和可复用的方式开发代码。// 输出vector的大小return 0;https://blog.csdn.net/m0_62338174/article/details/135573281?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22135573281%22%2C%22source%22%3A%22m0_62338174%22%7D
1、简介 C 是一种功能强大的编程语言它一直在不断发展和演进。自从 C11 标准发布以来C 引入了许多重要的新特性如智能指针、Lambda 表达式、右值引用等。随后的 C14 和 C17 标准也带来了更多的改进和增强。本篇博客将详细介绍 C 新标准引入的一些重要特性并给出代码示例和详细解释帮助读者了解和应用这些特性。
2.自动类型推导和初始化
C11 引入了 auto 关键字和统一的初始化语法使得变量的类型推导更加方便。在 C11 之前我们必须手动指定变量的类型例如 int、double 等。但是在某些情况下类型可能比较复杂或者难以确定使用 auto 关键字可以自动推导出变量的类型。同时C11 还引入了统一的初始化语法允许我们使用初始化列表对变量进行初始化这样代码更加简洁和易读。
示例代码
auto x 10; // x 的类型被推导为 int
auto y 3.14; // y 的类型被推导为 doublestd::vectorint nums {1, 2, 3}; // 使用初始化列表进行初始化3.智能指针
C11 引入了智能指针用于管理动态分配的内存避免内存泄漏和悬空指针的问题。其中最常用的是 shared_ptr 和 unique_ptr。shared_ptr 允许多个指针共享同一个对象并且会自动进行内存回收直到所有指针都不再需要该对象。unique_ptr 则保证每个对象只有一个指针拥有它可以通过 std::move 函数实现所有权的转移。
示例代码
std::shared_ptrint p1 std::make_sharedint(10); // 使用 make_shared 创建 shared_ptr
std::unique_ptrint p2(new int(20)); // 使用 new 创建 unique_ptrif (p1) {std::cout *p1 std::endl; // 访问指针指向的值
}4.Lambda 表达式
C11 引入了 Lambda 表达式允许我们在代码中定义匿名函数简化了函数对象的使用和编写。Lambda 表达式的基本形式为 [ capture-list ] ( params ) mutable exception - return-type { body }其中 capture-list 表示变量捕获列表params 表示参数列表mutable 和 exception 表示是否可变和异常规范return-type 表示返回类型body 表示函数体。
示例代码
std::vectorint nums {1, 2, 3, 4, 5};// 使用 Lambda 表达式对容器进行遍历和操作
std::for_each(nums.begin(), nums.end(), [](int n) {std::cout n * 2 ;
});5.右值引用和移动语义
C11 引入了右值引用和移动语义通过 std::move 函数实现对资源的高效转移提高了性能和效率。右值引用用 表示可以绑定到临时对象、表达式、返回右值引用的函数等允许我们对这些对象进行高效的转移和管理。移动语义则是指通过右值引用实现资源的转移避免了复制和销毁的开销。
示例代码
std::string str Hello;
std::vectorstd::string vec;vec.push_back(std::move(str)); // 使用 std::move 转移资源std::cout str std::endl; // 输出为空str 的资源已被转移6.并发编程支持
C11 引入了一套完整的并发编程库包括原子操作、线程、互斥量、条件变量等方便开发者进行多线程编程和并发控制。其中最常用的就是 std::thread 类和 std::mutex 类。std::thread 可以创建新的线程并执行指定的函数或 Lambda 表达式std::mutex 则可以保护共享资源避免多个线程同时访问和修改同一个变量。
示例代码
std::mutex mtx;
int count 0;std::vectorstd::thread threads;for (int i 0; i 10; i) {threads.emplace_back([]() {std::lock_guardstd::mutex lock(mtx); // 使用互斥量保护共享资源count;});
}for (auto thread : threads) {thread.join();
}std::cout count: count std::endl;7.其他特性
C14 和 C17 标准引入了更多的改进和增强如通用 lambda、变长模板、constexpr 函数、初始化列表等。通用 lambda 允许我们对任意类型的参数进行操作变长模板则可以支持任意数量和任意类型的模板参数constexpr 函数可以在编译时计算结果初始化列表则可以方便地对复杂对象进行初始化。
八、案例实现一个简单的并发下载器
#include iostream
#include vector
#include thread
#include mutexstd::mutex mtx;void downloadFile(const std::string url, const std::string filename) {// 模拟下载文件的耗时操作std::this_thread::sleep_for(std::chrono::seconds(2));// 使用互斥量保护共享资源std::lock_guardstd::mutex lock(mtx);std::cout Downloaded file: url saved as: filename std::endl;
}int main() {std::vectorstd::string urls {http://example.com/file1.txt,http://example.com/file2.txt,http://example.com/file3.txt};std::vectorstd::thread threads;for (const auto url : urls) {threads.emplace_back([]() {// 生成文件名std::string filename file_ std::to_string(std::hashstd::string()(url)) .txt;downloadFile(url, filename);});}for (auto thread : threads) {thread.join();}return 0;
}具体而言程序首先定义了一个包含多个 URL 的 std::vector 对象 urls这些 URL 表示需要下载的文件地址。然后我们创建了一个 std::vector 对象 threads用于存储多个线程对象。接着我们使用 for 循环遍历 urls每次循环都会创建一个新的线程并将其加入到 threads 中。每个线程都会调用 downloadFile 函数进行文件下载同时生成一个唯一的文件名。
downloadFile 函数模拟了文件下载的耗时操作具体而言我们使用了 std::this_thread::sleep_for 函数让线程休眠 2 秒钟模拟文件下载的过程。在函数结束之前我们使用 std::lock_guardstd::mutex 对共享资源进行了保护确保每个线程都能够正确地输出下载完成的信息。 以上是一个简单的并发下载器示例。我们使用了 C11 的并发编程支持通过创建多个线程并发地下载多个文件。每个线程都会调用 downloadFile 函数进行文件下载而该函数会使用互斥量保护共享资源避免多个线程同时访问和修改同一个文件。 通过这个案例我们可以看到 C11 的并发编程支持非常强大可以方便地实现多线程的应用程序提高程序的性能和效率。同时使用互斥量等工具可以保证多线程的安全性避免竞态条件和数据竞争的问题。