C++&STL(Standard Template Library,标准模板库)

vector 常用方法(C++)

头文件:

cpp 复制代码
#include <vector>
using namespace std;

1. 构造 & 初始化

cpp 复制代码
vector<int> v1;                  // 空 vector
vector<int> v2(5);                // 5 个元素,默认 0
vector<int> v3(5, 10);            // 5 个 10
vector<int> v4 = {1,2,3,4};       // 列表初始化
vector<int> v5(v4.begin(), v4.end()); // 拷贝一段
vector<int> v6(v4);               // 拷贝整个 vector

2. 访问元素

cpp 复制代码
v[i]           // 下标访问,不检查越界
v.at(i)        // 带越界检查,会抛异常
v.front()      // 第一个元素
v.back()       // 最后一个元素
v.data()       // 返回底层数组指针(int*)

3. 添加元素

cpp 复制代码
运行
v.push_back(x);     // 尾部添加 x
v.emplace_back(x);  // 尾部就地构造(效率更高)

v.insert(v.begin()+2, 100);    // 在第 2 个位置插入 100
v.insert(v.end(), 3, 50);      // 末尾插入 3 个 50

4. 删除元素

cpp 复制代码
运行
v.pop_back();       // 删除最后一个元素

v.erase(v.begin()+2);          // 删除第 2 个位置元素
v.erase(v.begin(), v.end());   // 删除一段

v.clear();        // 清空所有元素(size=0,capacity 不变)

5. 大小 & 容量

cpp 复制代码
运行
v.size();         // 元素个数
v.empty();        // 是否为空(true/false)
v.capacity();     // 实际分配的容量
v.max_size();     // 理论最大可存元素数
v.resize(10);     // 改 size,多删少补 0
v.resize(10, 2);  // 改 size,不足补 2
v.reserve(100);   // 预分配空间,不改变 size
v.shrink_to_fit();// 释放多余空间,capacity = size

6. 遍历

cpp 复制代码
运行
// 迭代器
for (auto it = v.begin(); it != v.end(); ++it)
    cout << *it;

// C++11 范围 for
for (auto x : v)
    cout << x;

// 下标
for (int i=0; i<v.size(); ++i)
    cout << v[i];

7. 交换 & 比较

cpp 复制代码
v1.swap(v2);      // 交换两个 vector
v1 == v2
v1 != v2
v1 < v2
// 按字典序比较

8. 不常用但有用

cpp 复制代码
v.assign(5, 10);       // 清空后赋值 5 个 10
v.assign(v2.begin(), v2.end());

C++ string 常用方法大全

cpp 复制代码
#include <string>
using namespace std;

一、构造与初始化

方法 说明
string s; 空字符串
string s(n, c); n 个字符 c
string s("abc"); 用 C 字符串初始化
string s(str); 拷贝构造
string s(str, pos, len); 从 str 的 pos 开始取 len 个字符
string s = "hello"; 赋值初始化

二、访问字符

方法 说明
s[i]
s.at(i) 带越界检查,抛异常
s.front() 第一个字符
s.back() 最后一个字符
s.data() 返回 const char* 指针
s.c_str() 返回 C 风格 const char*
三、长度与容量
方法 说明
s.size() 字符个数(同 length)
s.length() 同 size ()
s.empty() 是否为空
s.capacity() 容量
s.resize(n) 改长度,多删少补 '\0'
s.resize(n, c) 改长度,不足补 c
s.reserve(n) 预分配空间
s.shrink_to_fit() 释放多余空间
s.clear() 清空内容,size=0

四、拼接与追加

方法 |说明

s += str |拼接字符串

s += c |拼接单个字符

s.append(str) |追加字符串

s.append(str, pos, len) |追加子串

s.push_back© |末尾加一个字符

s.insert(pos, str)| 在 pos 处插入字符串
五、删除

方法 说明
s.erase(pos) 从 pos 删到末尾
s.erase(pos, len) 从 pos 删 len 个字符
s.pop_back() 删除最后一个字符
s.clear() 清空

六、截取与查找

方法 说明
s.substr(pos) 从 pos 截取到末尾
s.substr(pos, len) 截取 len 个字符
s.find(str) 从头找 str,返回首位置,找不到返回 string::npos
s.find(str, pos) 从 pos 开始找
s.rfind(str) 反向查找
s.find_first_of(str) 查找 str 中任意字符首次出现
s.find_last_of(str) 查找 str 中任意字符最后出现
七、比较

方法 |说明

s1 == s2 |判断相等

s1 != s2| 不等

s1 < s2 |字典序比较

s.compare(s2)| 相等返回 0,小于负,大于正
八、替换

方法 说明
s.replace(pos, len, str) 从 pos 替换 len 个字符为 str
相关推荐
二哈赛车手20 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
为何创造硅基生物20 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好20 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
栗子~~20 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
星寂樱易李20 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
YDS82920 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
仰泳之鹅21 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
之歆21 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
未若君雅裁1 天前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
于小猿Sup1 天前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶