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"; 赋值初始化

二、访问字符

方法 说明
si
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
相关推荐
东小西6 小时前
【SAA实战】第 4 篇 · Agent 短期记忆:saver 让 Agent 跨轮记得住(threadId 隔离)
java·后端·spring
许彰午6 小时前
22-DataCenter报文序列化
java·低代码·架构·状态模式
2601_962065256 小时前
[MySQL] SQL优化之性能分析
java·sql·mysql
BizzZ_6 小时前
C++(22)——类型转换和IO流
开发语言·c++
小范同学_6 小时前
JDK1.7 与 JDK1.8 HashMap 底层原理对比 + 数组并发扩容死循环详解
java·开发语言
geovindu7 小时前
CSharp: 万年历
开发语言·后端·c#·.net
我找到地球的支点啦7 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
予昊7 小时前
从零实现“在线五子棋对战“:WebSocket 实时通信 + 段位匹配
java·开发语言·网络·websocket
2601_962203517 小时前
【SpringAI入门】初识SpringAI
java
weixin_461408588 小时前
Mybatis-flex小记
java·开发语言·mybatis