vector 的常见用法
本质是'动态数组'——支持在尾部快速添加/删除元素,自动管理内存(无需手动分配/释放),还提供了丰富的操作接口。
vector<int>:是模板参数,指定这个 vector 只能存储 int 类型的数据(比如 10、-5、0 等整数)。如果想存字符串,就写成 vector<string>;存浮点数就是 vector<double>。
支持随机访问。
定义一个空的 vector<int>,命名为 。
C++ STL 包含 vector、set 和 string 等核心容器。vector 为动态数组,支持尾部增删及随机访问,提供 push_back、pop_back、clear、insert、erase 等方法。set 基于红黑树实现,元素唯一且自动排序,支持 insert、find、erase 操作,遍历需使用迭代器。string 用于文本处理,支持 cin/cout 输入输出,注意空格处理差异,提供拼接、比较、substr、find、replace 等丰富接口。掌握这些容器的特性与常用 API 有助于高效进行 C++ 开发。
本质是'动态数组'——支持在尾部快速添加/删除元素,自动管理内存(无需手动分配/释放),还提供了丰富的操作接口。
vector<int>:是模板参数,指定这个 vector 只能存储 int 类型的数据(比如 10、-5、0 等整数)。如果想存字符串,就写成 vector<string>;存浮点数就是 vector<double>。
支持随机访问。
定义一个空的 vector<int>,命名为 。
v将 n 个整数读入 v。
正向遍历 v,将所有元素依次输出 // 随机访问
定义一个 vector<int>,初始化它的长度为 n,所有元素都是 k。
vector<int> v(n, k)
直接删除 vector 的最后一个元素,并将 vector 的长度(size())减 1;仅删除元素,不会释放 vector 底层预留的内存(capacity() 不变)。
清空 vector 中所有的元素(但不会释放底层预留的内存)。
返回 vector 中实际的元素个数。区分 size() 是'实际元素数',capacity() 是'预留内存可存的元素数'。
是 vector 的插入方法,支持在任意位置插入单个元素、多个相同元素或一段元素,核心特点是'插入后,后续元素自动后移'。
v.insert(pos, val):在迭代器 pos 指向的位置插入单个元素 val,返回新插入元素的迭代器。
v.insert(pos, n, val):在迭代器 pos 指向的位置插入 n 个重复的元素 val。
v.insert(pos, first, last):在迭代器 pos 指向的位置插入 [first, last) 区间的元素(比如另一个 vector 的部分元素)。
erase() 是 vector 的删除方法,支持删除单个位置或一段区间的元素,核心特点是'删除后,后续元素自动前移'。
v.erase(pos):删除迭代器 pos 指向的单个元素,返回指向被删元素下一个位置的迭代器。
v.erase(first, last):删除 [first, last) 区间的所有元素,返回指向最后一个被删元素下一个位置的迭代器。
vector 的比较遵循'字典序规则',vector 支持直接使用 ==、!=、<、>、<=、>= 进行比较,无需额外函数,只需保证两个 vector 的元素类型可比较(比如 int、string 等基础类型)。
vector<int> vs[10],表示 10 个空的 vector<int>。每个元素 vs[0]、vs[1]...vs[9] 都是一个独立的 vector<int>。每个 vector<int> 初始化时默认是空的(size()=0,capacity() 通常为 0)。
vs[i].push_back() 函数将第 i 行的所有元素推入 vs[i]。输出用 cout << vs[i][j]。每 i 行 j 可能是不同的。
vector<vector<int>> vs(n, vector<int>()),表示二维的 vector,其中第一维长度为 n,即相当于定义了 n 个空的 vector<int>;第 i 行有 k 个正整数,使用 vs[i].push_back() 函数将第 i 行的所有元素推入 vs[i]。
定义一个空的 set<int>,命名为 s。
// set 只能通过迭代器遍历到对应位置,无法随机访问。元素唯一(不重复)、自动升序排序。
向 set 中插入元素,且会自动保证 set 的两大特性:元素唯一(不重复)、自动升序排序(默认)。O(log n)(红黑树的插入复杂度),比 vector 插入(中间插入 O(n))高效。
s.insert(val):插入单个元素 val,返回 pair<iterator, bool>(迭代器 + 是否插入成功)。适用于插入单个元素,需判断是否重复。
s.insert(pos, val):提示插入位置 pos(仅优化性能,不影响排序),返回指向插入元素的迭代器。适用于已知大致插入位置,提升效率。
s.insert(first, last):插入 [first, last) 区间的元素(比如数组/vector 的元素)。适用于批量插入多个元素。
可以用 auto 自动判断 it 的类型。
查找 set 中是否存在指定值的元素,并返回指向该元素的迭代器(若不存在则返回 s.end())。查找效率:O(log n)(红黑树的查找复杂度)。
s.find(val):返回迭代器,用于查找元素并获取迭代器(需操作元素)。
支持按迭代器、值、区间删除 set 元素。
s.erase(it):删除迭代器 it 指向的单个元素。
s.erase(val):删除值为 val 的元素(若存在)。
s.erase(first, last):删除 [first, last) 迭代器区间的所有元素。
清空 set 中所有的元素,使其恢复为初始的空状态,同时会释放 set 底层红黑树占用的内存。和 vector 的 clear() 有明显区别。
获取 set 中当前存储的元素个数。
string r;
string 输出:简单直接(核心用 cout)cout << s;
string 输入:分场景选择(核心区别:是否处理空格)
场景 1:输入不带空格的字符串(用 cin >>)
cin >> 字符串变量 是最基础的输入方式,会以空格/换行/制表符为分隔符,只读取第一个分隔符前的内容。
场景 2:输入带空格/换行的整行字符串(用 getline(cin, s))
关键坑点:cin >> 后接 getline 会吞掉换行符:如果先使用 cin >> 读取数据,再用 getline,cin >> 会留下换行符 \n 在输入缓冲区,导致 getline 直接读取空字符串。
使用 + 操作符将 s1 和 s2 拼接。
判断 s1 和 s2 的字典序大小,如果 s1 > s2,那么输出 1;如果 s1 == s2,那么输出 0;如果 s1 < s2,那么输出 -1。
删除字符串中所有字符,使其变为空字符串(长度为 0),且会释放字符串底层占用的内存。
执行后:s.length()/s.size() 变为 0,字符串内容为空(s == "")。
返回字符串中当前的字符个数,和 s.size() 是完全等价的。统计所有可见字符(包括空格、数字、符号),不包含字符串末尾的隐藏结束符 \0。空字符串的 length() 为 0。
返回值类型:必须用 size_t/auto 接收,避免用 int(无符号数转有符号数可能导致比较错误)。
s.insert(pos, str):在索引 pos 处插入字符串 str。
// string 的底层是字符数组,pos 就是这个数组的下标,规则和 vector 下标完全一致:
s.insert(pos, n, c):在索引 pos 处插入 n 个重复的字符 c。
s.insert(it, c):在迭代器 it 指向的位置插入字符 c。
s.insert(it, first, last):在迭代器 it 处插入 [first, last) 区间的字符。
删除字符串中指定位置/区间的字符,支持删除单个字符、连续区间字符两种核心形式。
s.erase(it):删除迭代器 it 指向的单个字符。
s.erase(first, last):删除迭代器区间 [first, last) 的字符。
s.erase(pos, len):从下标 pos 开始,删除 len 个字符。
s.erase(pos):从下标 pos 开始,删除到字符串末尾。
从字符串中截取指定范围的子串并返回新字符串(原字符串不会被修改)。
在字符串中查找指定的子串/字符,并返回其首次出现的下标;若未找到,则返回 string::npos(一个表示'不存在'的静态常量)返回 -1。
s.find(c):查找字符 c 首次出现的下标。
s.find(str):查找子串 str 首次出现的下标。
s.find(str, pos):从下标 pos 开始,查找子串 str 首次出现的下标。
将字符串中指定位置/区间的字符替换为新的字符/字符串,支持精准替换、批量替换等多种形式。
s.replace(pos, len, new_str):从下标 pos 开始,将 len 个字符替换为字符串 new_str。
s.replace(pos, len, n, c):从下标 pos 开始,将 len 个字符替换为 n 个重复的字符 c。
s.replace(first, last, new_str):将迭代器区间 [first, last) 的字符替换为 new_str。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online