STL中vector和string容器
一vector1.1 vector 是什么vector是可变长度的动态数组底层采用连续内存空间存储数据支持随机访问会自动管理内存完美解决了原生数组长度固定、内存泄漏的痛点。1.2 常用 API 实战1.2.1. 初始化方式#include vector using namespace std; // 1. 空vector vectorint v1; // 2. 指定大小初始值为0 vectorint v2(5); // 3. 指定大小初始值 vectorint v3(5, 10); // 5个10 // 4. 列表初始化C11及以上 vectorint v4 {1,2,3,4,5};1.2.2. 访问元素vectorint v {1,2,3}; // 1. 下标访问速度快越界不报错 cout v[0] endl; // 2. at()访问越界抛异常更安全 cout v.at(1) endl; // 3. 访问首尾元素 cout v.front() v.back() endl;1.2.3. 增删改查vectorint v; // 尾部添加元素最高效 v.push_back(1); v.emplace_back(2); // C11原地构造比push_back更高效 // 中间插入效率低需移动元素 v.insert(v.begin() 1, 3); // 在下标1处插入3 // 删除元素 v.pop_back(); // 尾部删除 v.erase(v.begin()); // 删除第一个元素 v.clear(); // 清空所有元素size0capacity不变 // 容量操作性能优化关键 v.reserve(100); // 预留100个元素空间仅改变capacity不改变size v.resize(10); // 调整有效元素个数改变size1.2.4. 遍历方式vectorint v {1,2,3,4}; // 方式1下标遍历最常用 for(int i0; iv.size(); i){ cout v[i] ; } // 方式2范围forC11最简洁 for(int num : v){ cout num ; }2.1什么是 vector 二维数组vectorvectorint v;2.2二位数组的遍历方式2.2.1. 空二维 vector先定义再赋值vectorvectorint v;2.2.2. 指定行数 空行// 3行每行都是空vector vectorvectorint v(3);2.2.3. 指定行数 列数// 3行4列所有元素 10 vectorvectorint v(3, vectorint(4, 10));2.2.4. 指定行列 统一初始值// 3行4列所有元素 10 vectorvectorint v(3, vectorint(4, 10));2.2.5. 统一初始化 N 行 M 列int n 3, m 4; vectorvectorint v(n, vectorint(m, 0));2.3遍历方式for(int i0; iv.size(); i){ for(int j0; jv[i].size(); j){ cout v[i][j] ; } cout endl; }二string3.1 string 是什么string是专门处理字符序列的容器本质是存放 char 类型的 vector但封装了大量字符串专属 API比 char * 数组更安全、更易用。3.2 常用 API 实战3.2.1. 初始化方式// 1. 空字符串 string s1; // 2. C风格字符串初始化 string s2(hello); // 3. 重复字符初始化 string s3(5, a); // aaaaa // 4. 列表初始化 string s4 {world}; // 5. 拷贝初始化 string s5(s2);3.2.2. 字符串访问与转换string s hello stl; // 1. 随机访问 cout s[0] s.at(1) endl; // 2. 获取长度/判空 cout s.size() s.length() endl; // 二者等价 cout s.empty() endl;3.2.3. 字符串操作核心string s hello; // 1. 拼接效率远高于 s world; // 推荐 s.append(!); // 追加字符串 s.push_back(a); // 追加单个字符 // 2. 截取子串 string sub s.substr(0, 5); // 从下标0开始截取5个字符 // 3. 查找返回下标找不到返回string::npos int pos s.find(world); // 正向查找 int rpos s.rfind(o); // 反向查找 // 4. 替换 s.replace(0, 5, hi); // 把下标0-5的字符替换为hi // 5. 清空 s.clear();3.2.4. 数值转换C11// 数字转字符串 string s1 to_string(123); string s2 to_string(3.14); // 字符串转数字 int num stoi(123); double dou stod(3.14); long long ll stoll(123456);3.2.5. 遍历方式string s hello; // 范围for最简洁 for(char c : s){ cout c ; }