c++
1 容器 1.1 基本概念 c++ stl 对象 指针 引用 迭代器 容器接口 1.1 接口 // 1.1 vector —— 动态数组 vector<int> v = {1, 2, 3}; v.push_back(4); // 末尾添加 v.pop_back(); // 删除末尾 v.size(); // 元素个数 v.empty(); // 是否为空 v[0]; // 随机访问(无边界检查) v.at(0); // 随机访问(边界检查) v.front(); v.back(); // 首/尾元素 v.clear(); // 清空 // 1.2 deque —— 双端队列 deque<int> d = {1, 2}; d.push_front(0); // 头插 d.push_back(3); // 尾插 d.pop_front(); // 头删 d.pop_back(); // 尾删 d.front(); d.back(); // 首/尾访问 d.size(); d.empty(); // 1.3 list —— 双向链表 list<int> l = {1, 2, 3}; l.push_front(0); l.push_back(4); l.pop_front(); l.pop_back(); l.remove(2); // 删除所有值为2的元素 l.size(); l.empty(); l.front(); l.back(); // 1.4 set —— 有序唯一集合 set<int> s = {3, 1, 4, 1}; // 实际存储 {1,3,4} s.insert(2); // 插入 s.erase(3); // 删除指定值 s.find(4); // 查找,返回迭代器,未找到返回 end() s.count(1); // 计数(0或1) s.size(); s.empty(); // 允许重复元素用 multiset,接口基本相同 // 1.5 map —— 有序键值对 map<string, int> ages; ages["Alice"] = 25; // 插入/修改;注意:若 key 不存在,[] 会自动插入一个默认值(0) ages["Bob"] = 30; ages.erase("Alice"); // 删除 ages.find("Bob"); // 查找,不想触发自动插入就用 find 而不是 [] ages.count("Tom"); // 计数 ages.size(); ages.empty(); // 允许重复key用 multimap,接口基本相同 // 1.6 unordered_set —— 哈希无序集合 unordered_set<int> us = {3, 1, 4, 1}; us.insert(2); us.erase(4); us.find(3); // O(1) 查找 us.count(1); us.size(); us.empty(); // 1.7 unordered_map —— 哈希无序键值对 unordered_map<string, int> scores; scores["Tom"] = 95; scores["Jerry"] = 88; scores.erase("Tom"); scores.find("Jerry"); scores.count("Bob"); scores.size(); scores.empty(); // 1.8 stack —— 栈(LIFO) stack<int> st; st.push(1); // 入栈 st.push(2); st.top(); // 查看栈顶 st.pop(); // 出栈(无返回值) st.empty(); st.size(); // 1.9 priority_queue —— 优先队列(默认最大堆) priority_queue<int> pq; pq.push(5); pq.push(1); pq.push(10); pq.top(); // 最大元素(10) pq.pop(); // 移除堆顶 pq.empty(); pq.size(); // 想要最小堆:priority_queue<int, vector<int>, greater<int>> minPq; // 1.10 pair —— 两个值的组合,不用专门定义 struct pair<string, int> p1 = {"Alice", 25}; p1.first; // "Alice" p1.second; // 25 pair<int, int> p2 = make_pair(1, 2); // 另一种构造写法 // 1.11 string —— 字符串(可以当成 char 的容器,替代 char* + strcpy/strcat 那一套) string s2 = "hello"; s2 += " world"; // 拼接 s2.size(); s2.length(); // 长度(两个等价) s2.empty(); s2[0]; // 下标访问 s2.substr(1, 3); // 从下标1开始取3个字符,"ell" s2.find("wor"); // 查找子串,返回起始下标,找不到返回 string::npos s2.replace(0, 5, "Hi"); // 替换 s2.append("!"); // 追加 to_string(42); // int -> string stoi("123"); // string -> int s2.c_str(); // 要传给 C 函数(如 fopen)时转成 const char* // 1.12 array —— 固定大小数组(比原生C数组多了 .size() 等接口,但不能动态扩容) array<int, 3> a = {1, 2, 3}; a.size(); a[0]; a.fill(0); // 全部填充为0 1.2 其他 对所有容器通用 ...