news 2026/5/1 12:45:23

STL中vector和string容器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STL中vector和string容器

一:vector

1.1 vector 是什么?

vector可变长度的动态数组,底层采用连续内存空间存储数据,支持随机访问,会自动管理内存,完美解决了原生数组长度固定、内存泄漏的痛点。

1.2 常用 API 实战

1.2.1. 初始化方式

#include <vector> using namespace std; // 1. 空vector vector<int> v1; // 2. 指定大小,初始值为0 vector<int> v2(5); // 3. 指定大小+初始值 vector<int> v3(5, 10); // 5个10 // 4. 列表初始化(C++11及以上) vector<int> v4 = {1,2,3,4,5};

1.2.2. 访问元素

vector<int> 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. 增删改查

vector<int> v; // 尾部添加元素(最高效) v.push_back(1); v.emplace_back(2); // C++11,原地构造,比push_back更高效 // 中间插入(效率低,需移动元素) v.insert(v.begin() + 1, 3); // 在下标1处插入3 // 删除元素 v.pop_back(); // 尾部删除 v.erase(v.begin()); // 删除第一个元素 v.clear(); // 清空所有元素(size=0,capacity不变) // 容量操作(性能优化关键) v.reserve(100); // 预留100个元素空间,仅改变capacity,不改变size v.resize(10); // 调整有效元素个数,改变size

1.2.4. 遍历方式

vector<int> v = {1,2,3,4}; // 方式1:下标遍历(最常用) for(int i=0; i<v.size(); i++){ cout << v[i] << " "; } // 方式2:范围for(C++11,最简洁) for(int num : v){ cout << num << " "; }

2.1什么是 vector 二维数组?

vector<vector<int>> v;

2.2二位数组的遍历方式

2.2.1. 空二维 vector(先定义再赋值)

vector<vector<int>> v;

2.2.2. 指定行数 + 空行

// 3行,每行都是空vector vector<vector<int>> v(3);

2.2.3. 指定行数 + 列数

// 3行4列,所有元素 = 10 vector<vector<int>> v(3, vector<int>(4, 10));

2.2.4. 指定行列 + 统一初始值

// 3行4列,所有元素 = 10 vector<vector<int>> v(3, vector<int>(4, 10));

2.2.5. 统一初始化 N 行 M 列

int n = 3, m = 4; vector<vector<int>> v(n, vector<int>(m, 0));

2.3遍历方式

for(int i=0; i<v.size(); i++){ for(int j=0; j<v[i].size(); j++){ cout << v[i][j] << " "; } cout << endl; }

二:string

3.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. 数值转换(C++11)

// 数字转字符串 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 << " "; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 12:45:23

Go语言net/http与Web开发:构建高性能HTTP服务

引言Go语言的标准库net/http提供了完善的HTTP服务端和客户端实现&#xff0c;其设计简洁优雅&#xff0c;性能优异&#xff0c;是构建Web服务的主流选择。本文将深入剖析HTTP服务端的核心组件请求处理流程、中间件模式以及客户端使用&#xff0c;并通过实际案例展示如何构建完整…

作者头像 李华
网站建设 2026/5/1 12:44:22

五分钟完成TaotokenAPIKey配置并实现PythonSDK首次调用

五分钟完成 Taotoken API Key 配置并实现 Python SDK 首次调用 1. 获取 Taotoken API Key 登录 Taotoken 控制台后&#xff0c;点击左侧导航栏的「API 密钥」进入管理页面。选择「创建新密钥」按钮&#xff0c;系统将生成一串以 sk- 开头的密钥字符串。请立即复制该密钥并妥善…

作者头像 李华
网站建设 2026/5/1 12:42:25

90% 跨境卖家都在用!凌风工具箱批量下架商品,适配 TEMU/Shein/TK 全平台

做 TEMU、Shein、TK 跨境电商的卖家&#xff0c;是不是每天都被批量下架商品的琐事折腾得身心俱疲&#xff1f;换季清仓要清理链接、平台风控预警要下架、断货滞销品要清理、平台规则更新也要调整商品 —— 面对店铺成百上千甚至上万条货品链接&#xff0c;要是靠人工逐个后台点…

作者头像 李华
网站建设 2026/5/1 12:41:32

【全网首发】2026年华东杯数学建模ABC题全量深度解析与冲奖攻略——2026华东杯数学建模(附全代码/论文/数据集)-详细解题思路和论文+完整项目代码+结果图表+全套资源(多套持续更新)

大家好&#xff01;随着2026年第二十八届华东地区数学建模邀请赛&#xff08;“华东杯”&#xff09;的战角正式吹响&#xff0c;全国各大高校的数模精英们再次迎来了这场脑力与体力的极限较量。作为国内历史最悠久、含金量极高、竞争异常激烈的区域性/全国性数模赛事之一&…

作者头像 李华