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
相关推荐
茉莉玫瑰花茶1 小时前
LangChain 核心组件 [ 2 ]
java·数据库·langchain
eastyuxiao1 小时前
OpenClaw 自动处理核心逻辑
开发语言·人工智能
小郑加油1 小时前
python学习Day10天:列表进阶 + 内置函数 + 代码简化
开发语言·python·学习
一只牛_0071 小时前
pthread亲和性继承的一个坑:main绑核让整个进程退化到单核
c++
信徒_1 小时前
ID 生成技术选型
java
eastyuxiao1 小时前
影响 OpenClaw 自动处理效率的核心因素
开发语言·人工智能
a8a3022 小时前
Laravel8.x新特性全解析
java·spring boot·后端
啧不应该啊2 小时前
Day1 python与c宏观区别
c语言·开发语言
时空系2 小时前
第13篇:综合实战——制作我的小游戏 python中文编程
开发语言·python·ai编程