C++ std
C++ 标准库(std
库)是 C++ 语言的核心组成部分,提供了丰富的功能,包括容器、算法、字符串处理、输入输出、多线程支持等。std
是标准库的命名空间,所有标准库的类和函数都定义在这个命名空间中。
以下是 C++ 标准库的主要组成部分和功能的详细介绍:
1. 容器(Containers)
容器是用于存储数据的类模板,提供了多种数据结构。
顺序容器
std::vector
:动态数组,支持快速随机访问。std::array
:固定大小的数组,封装了 C 风格数组。std::deque
:双端队列,支持快速头尾插入和删除。std::list
:双向链表,支持高效插入和删除。std::forward_list
:单向链表,内存占用更小。
关联容器
std::set
:有序集合,元素唯一。std::multiset
:有序集合,允许重复元素。std::map
:有序键值对,键唯一。std::multimap
:有序键值对,允许重复键。
无序容器(C++11 引入)
std::unordered_set
:哈希集合,元素唯一。std::unordered_multiset
:哈希集合,允许重复元素。std::unordered_map
:哈希键值对,键唯一。std::unordered_multimap
:哈希键值对,允许重复键。
2. 算法(Algorithms)
算法是用于操作容器中数据的函数模板,定义在 <algorithm>
头文件中。
常用算法
std::sort
:对容器中的元素进行排序。std::find
:查找容器中的元素。std::copy
:复制容器中的元素。std::transform
:对容器中的元素进行转换。std::accumulate
:计算容器中元素的累加值。std::for_each
:对容器中的每个元素执行操作。
示例
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {5, 3, 1, 4, 2};
std::sort(vec.begin(), vec.end()); // 排序
for (int x : vec) {
std::cout << x << " "; // 输出:1 2 3 4 5
}
return 0;
}
3. 字符串处理(Strings)
std::string
是用于处理字符串的类,定义在 <string>
头文件中。
常用功能
std::string
:表示一个字符串。std::wstring
:表示一个宽字符字符串。std::to_string
:将数值转换为字符串。std::stoi
、std::stol
、std::stoll
:将字符串转换为整数。std::stof
、std::stod
、std::stold
:将字符串转换为浮点数。
示例
#include <string>
#include <iostream>
int main() {
std::string str = "Hello, World!";
std::cout << str.substr(0, 5) << std::endl; // 输出:Hello
return 0;
}
4. 输入输出(Input/Output)
C++ 标准库提供了强大的输入输出功能,定义在 <iostream>
头文件中。
常用类
std::cin
:标准输入流。std::cout
:标准输出流。std::cerr
:标准错误流。std::ifstream
:文件输入流。std::ofstream
:文件输出流。std::stringstream
:字符串流。
示例
#include <iostream>
#include <fstream>
int main() {
std::ofstream file("test.txt");
file << "Hello, File!" << std::endl;
file.close();
std::ifstream inFile("test.txt");
std::string line;
std::getline(inFile, line);
std::cout << line << std::endl; // 输出:Hello, File!
return 0;
}
5. 智能指针(Smart Pointers)
智能指针用于自动管理动态内存,定义在 <memory>
头文件中。
常用智能指针
std::unique_ptr
:独占所有权的智能指针。std::shared_ptr
:共享所有权的智能指针。std::weak_ptr
:弱引用智能指针,用于解决循环引用问题。
示例
#include <memory>
#include <iostream>
int main() {
std::unique_ptr<int> ptr = std::make_unique<int>(42);
std::cout << *ptr << std::endl; // 输出:42
return 0;
}
6. 多线程支持(Multithreading)
C++11 引入了多线程支持,定义在 <thread>
头文件中。
常用类
std::thread
:表示一个线程。std::mutex
:互斥锁,用于线程同步。std::lock_guard
:RAII 风格的互斥锁管理。std::condition_variable
:条件变量,用于线程间通信。
示例
#include <thread>
#include <iostream>
void task() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
std::thread t(task);
t.join(); // 等待线程结束
return 0;
}
7. 时间处理(Chrono)
std::chrono
是用于时间处理的库,定义在 <chrono>
头文件中。
常用功能
std::chrono::system_clock
:系统时钟。std::chrono::steady_clock
:稳定时钟。std::chrono::duration
:表示时间间隔。std::chrono::time_point
:表示时间点。
示例
#include <chrono>
#include <thread>
#include <iostream>
int main() {
auto start = std::chrono::steady_clock::now();
std::this_thread::sleep_for(std::chrono::seconds(1));
auto end = std::chrono::steady_clock::now();
std::cout << "Elapsed time: " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << " ms" << std::endl;
return 0;
}
8. 其他功能
std::function
:用于存储可调用对象(函数、Lambda 表达式等)。std::tuple
:用于存储多个不同类型的值。std::optional
(C++17):表示一个可能不存在的值。std::variant
(C++17):表示一个可以存储多种类型的值。
总结
C++ 标准库(std
库)提供了丰富的功能,涵盖了容器、算法、字符串处理、输入输出、智能指针、多线程、时间处理等方面。它是 C++ 开发中不可或缺的工具,能够显著提高开发效率和代码质量。
如果你对某个部分特别感兴趣,可以告诉我,我会提供更详细的解释和示例! 😊
- 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《博瑞博客》。
- 本文网址:http://blog.neacn.com/C/161.html
- 上篇文章:UTF-16LE 和 UTF-16BE
- 下篇文章:985工程大学有哪些