深入浅出 C++ 标准库

深入浅出 C++ 标准库

1. 什么是 C++ 标准库?

C++ 标准库就像是一个内置的工具箱,里面装满了写代码常用的工具,比如:

  • 处理字符串std::string
  • 读写文件std::ifstream
  • 管理动态数组std::vector
  • 智能指针std::shared_ptr
  • 排序、查找算法std::sortstd::find

它和 Java 的 java.util、Python 的 built-in 库类似,但 C++ 的标准库更底层、更高效。


2. 为什么需要 std::

C++ 标准库的所有工具都放在一个叫 std(Standard 的缩写)的工具箱 里。

你要用里面的工具,就得告诉编译器:"我要用 std 工具箱里的东西!"

举个例子:

  • Java 写法(自动找包):

    java 复制代码
    import java.util.ArrayList; // 引入 ArrayList
    ArrayList<String> list = new ArrayList<>(); // 直接用
  • C++ 写法(必须指定工具箱):

    cpp 复制代码
    #include <vector>          // 引入 vector
    std::vector<std::string> list; // 必须加 std::

为什么 C++ 要这么麻烦?

因为 C++ 允许你自己造一个 vector,如果不加 std::,编译器不知道你要用标准库的 vector 还是自己写的 vector


3. 标准库里有哪些常用工具?

(1) 字符串处理(std::string

作用 :比 C 语言的 char[] 更好用,支持动态扩容、查找、拼接等。
示例

cpp 复制代码
#include <string>
std::string name = "张三";
name += " 你好!"; // 直接拼接
int len = name.length(); // 获取长度

(2) 动态数组(std::vector

作用 :类似 Java 的 ArrayList,自动扩容的数组。
示例

cpp 复制代码
#include <vector>
std::vector<int> nums = {1, 2, 3};
nums.push_back(4); // 添加元素
int first = nums[0]; // 访问元素

(3) 哈希表(std::unordered_map

作用 :类似 Java 的 HashMap,快速查找键值对。
示例

cpp 复制代码
#include <unordered_map>
std::unordered_map<std::string, int> scores = {{"Alice", 90}, {"Bob", 80}};
scores["Charlie"] = 85; // 添加键值对
int bobScore = scores["Bob"]; // 查找

(4) 智能指针(std::shared_ptr

作用 :自动管理内存,避免内存泄漏(比 new/delete 更安全)。
示例

cpp 复制代码
#include <memory>
auto ptr = std::make_shared<int>(42); // 创建一个智能指针
*ptr = 100; // 使用方式和普通指针一样
// 不用手动 delete,内存会自动释放!

(5) 文件读写(std::fstream

作用 :读写文件,比 C 语言的 FILE* 更安全。
示例

cpp 复制代码
#include <fstream>
std::ofstream file("test.txt"); // 写文件
file << "Hello, C++!" << std::endl;
file.close();

(6) 算法(std::sortstd::find

作用 :提供常用算法,如排序、查找。
示例

cpp 复制代码
#include <algorithm>
std::vector<int> nums = {3, 1, 4, 1, 5};
std::sort(nums.begin(), nums.end()); // 排序
auto it = std::find(nums.begin(), nums.end(), 4); // 查找

4. 怎么减少 std:: 的重复书写?

如果你觉得每次写 std:: 太麻烦,可以用 using 声明:

(1) 只引入某个工具

cpp 复制代码
#include <string>
using std::string; // 只引入 string

string name = "Alice"; // 现在不用写 std:: 了

(2) 引入整个工具箱(慎用!)

cpp 复制代码
#include <iostream>
using namespace std; // 引入整个 std 工具箱

cout << "Hello" << endl; // 不用写 std::

⚠️ 风险 :如果自己写的类和标准库重名(比如你自己写了个 vector),会冲突!


5. 最佳实践

  1. 在小型项目里 :可以用 using namespace std 偷懒。

  2. 在大型项目/头文件里 :老老实实写 std::,避免命名冲突。

  3. 推荐写法

    cpp 复制代码
    #include <vector>
    using std::vector; // 只引入需要的
    
    vector<int> nums = {1, 2, 3}; // 既清晰又安全

总结

  • C++ 标准库:一个内置的工具箱,提供字符串、容器、算法等常用功能。
  • std:::告诉编译器"我要用标准库的东西"。
  • using :可以少写 std::,但要小心命名冲突。
  • 常用工具
    • std::string(字符串)
    • std::vector(动态数组)
    • std::unordered_map(哈希表)
    • std::shared_ptr(智能指针)
    • std::sort(排序算法)

记住:C++ 标准库就像瑞士军刀,功能强大,但要用对方法! 🔧

相关推荐
jinanwuhuaguo3 分钟前
OpenClaw联邦之心——从孤岛记忆到硅基集体潜意识的拓扑学革命(第二十三篇)
android·人工智能·kotlin·拓扑学·openclaw
Gary Studio1 小时前
安卓HAL C++基础-命名域
android
诸神黄昏EX2 小时前
Android Google XTS
android
eSsO KERF2 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
pengyu5 小时前
【Kotlin 协程修仙录 · 筑基境 · 后阶】 | 调度器的艺术:Dispatchers 四大护法与 withContext 性能密码
android·kotlin
uElY ITER5 小时前
MySQL 中如何进行 SQL 调优
android·sql·mysql
xxjj998a5 小时前
Laravel3.x:奠定现代PHP框架的重要里程碑
android·开发语言·php
Yang-Never6 小时前
Git -> Git Worktree 工作树
android·开发语言·git·android studio
xingpanvip6 小时前
星盘接口开发文档:日运语料接口指南
android·开发语言·前端·css·php·lua
计算机安禾6 小时前
【Linux从入门到精通】第42篇:深入理解Linux内存管理
android·linux·运维