当前位置: 首页 > news >正文

C++入门之string(一)

目录

一、STL简介

​编辑二、STL中的方法

①string的构造函数

②string的析构函数

③赋值运算符=重载

④[]的重载

三、遍历+修改引出迭代器

方法一: 下标 + [] (小众)

方法二: 迭代器 (所有容器主流遍历+修改方式)

方法三: 范围for C++11 语法糖


一、STL简介

STL是C++标准库的重要组成部分,不仅是一个可复用的组件库,而是一个包罗数据结构和算法的软件框架

string其实就是字符数组顺序表

class string { private: char* _str; size_t size; size_t _capacity; };

string的实例化类

①编码----->utf-8

②编码------>utf-16

③编码----->utf-32

④宽字符字符串,用于兼容旧版 Windows API

编码:

ASCII:早期美国制定的编码,只用 1 个字节的低 7 位,只能表示英文字母、数字和符号,无法支持其他语言。

Unicode:它不是一种 “存储格式”,而是一套值 - 符号映射表,给全世界几乎所有字符分配了唯一的数字编号(码点)。前面说到的utf-8/utf-16/utf-32都是unicode编码。

UTF-8是如何编码的?

npos----->整数的最大值

二、STL中的方法

①string的构造函数

void test_string1() { //string(); string s1; // 无参构造(默认构造) //空字符串 //string (const char* s); string s2("hello world");// 常量字符串构造 //hello world //string (const string& str); string s3(s2); // 拷贝构造s2 //hello world //string (const string& str, size_t pos, size_t len = npos); string s4(s2, 1, 6); // 从s2下标1开始,取6个字符 //ello w //string (const string& str, size_t pos, size_t len = npos); string s5(s2, 1, 60); // 从s2下标1开始,取60个字符(不足则取到末尾)//ello world //string (const string& str, size_t pos, size_t len = npos); string s6(s2, 6); // 从s2下标6开始,取到字符串末尾 //world const char* str = "hello world"; //string (const char* s, size_t n); string s7(str, 5); // 从C字符串str取前5个字符构造 //hello //string (size_t n, char c); string s8(100, '#'); // 生成100个指定字符'#' //100个# }

②string的析构函数

③赋值运算符=重载

//(一)string& operator= (const string& str); s1 = s2; // 赋值重载:用另一个string对象str赋值 cout << s1 << endl; // hello world //(二)string& operator= (const char* s); s1 = "xxxx"; // 赋值重载:用C风格字符串const char*赋值 cout << s1 << endl; // xxxx //(三)string& operator= (char c); s1 = 'x'; // 赋值重载:用单个字符char赋值 cout << s1 << endl; // x

④[]的重载

三、遍历+修改引出迭代器

方法一: 下标 + [] (小众)

④[]的重载

for (size_t i = 0;i < s1.size();i++) { s1[i]++; } cout << s1 << endl; //jfmmp!xpsme

方法二: 迭代器 (所有容器主流遍历+修改方式)

//[begin(),end()) //s1的每个字符-- string::iterator it1 = s1.begin(); while (it1 != s1.end()) { (*it1)--; ++it1; } cout << s1 << endl; //iello world
不仅仅适用于string,vector,list等容器适用
vector<int> v; v.push_back(100000); v.push_back(2); v.push_back(3); vector<int>::iterator it2 = v.begin(); while (it2 != v.end()) { cout << *it2 << endl; ++it2; } cout << endl; list<int> lt; lt.push_back(1); lt.push_back(2); lt.push_back(3); list<int>::iterator it3 = lt.begin(); while (it3 != lt.end()) { (*it3)++; cout << *it3 << endl; ++it3; } cout << endl;

迭代器的意义:

1、同一类似方式遍历修改容器

2、算法脱离具体底层结构,和底层结构解耦

算法独立模板实现针对多个容器处理

std::reverse是算法函数,在<algorithm>里,要求传入同一容器的一对迭代器[begin, end)

reverse(s1.begin(), s1.end()); reverse(v.begin(), v.end()); reverse(lt.begin(), lt.end()); cout << s1 << endl; //dlrow ollei for (auto x : v) cout << x << " "; //3 2 100000 cout << endl; for (auto x : lt) cout << x << " "; //4 3 2 cout << endl;

方法三: 范围for C++11 语法糖

先来看看auto

auto ----自动识别类型
auto x = 10; // auto 自动推导为 int // x = 10 auto y = 10.1; // auto 自动推导为 double // y = 10.1 cout << x << endl; // 输出:10 cout << y << endl; // 输出:10.1 int& z = x; // z 是 x 的引用(别名) auto& m = z; // auto 自动推导为 int&,m 是 z/x 的别名 m++; // x 变成 11 auto p1 = &x; // auto 自动推导为 int*(指针类型) auto* p2 = &x; // 明确指定指针,auto 推导为 int,最终 p2 是 int*

范围for会自动取容器数据赋值给e,自动判断结束,自动迭代,本质底层也会替代成迭代器

for (auto& e : s1) { e++; } cout << endl; for (auto e : s1) { cout << e << " "; } cout << endl; for (auto e : v) { cout << e << " "; } cout << endl; for (auto e : lt) { cout << e << " "; } cout << endl;

遍历数组中的元素

int arr[] = { 1,2,3,4,5,6,7 }; for (int i = 0;i < sizeof(arr) / sizeof(arr[0]);i++) { cout << arr[i] << " "; } cout << endl; for (auto e : arr) { cout << e << " "; } cout << endl;
http://www.rkmt.cn/news/1494476.html

相关文章:

  • 手把手复现中文对话机器人:LSTM Seq2Seq模型训练+推理全流程代码包
  • 如何在Windows上安装安卓应用?APK安装器的完整使用指南
  • 如何利用BiliTools的AI视频总结功能实现3倍学习效率提升
  • 瑞芯微RV1126B开发板(EASY-EAI-PI2) WIFI STA
  • 西科大数电实验四:D/ JK/ RS触发器FPGA实现与Diamond波形仿真全套工程文件
  • 如何在Photoshop中直接使用Stable Diffusion?5分钟快速上手终极AI插件指南
  • Horizon RDS场实战:从安全策略配置到应用程序池权限管理的完整避坑指南
  • 客户投诉率降低95%!往复式洗车机如何赋能洗车连锁门店转型升级? - 资讯纵览
  • 让Mac文件预览体验提升10倍的秘密武器:50+款QuickLook插件深度解析
  • 如何在3分钟内用OpenVINO AI插件让Audacity变身专业音频工作室
  • 文件系统-3-IO性能测试工具-1-fio-1-理论简介 - Hello
  • 实现 OpenClaw 跨平台联动,详细配置与实操演示
  • 猫抓cat-catch:5分钟快速上手的浏览器视频下载终极指南
  • AI 技术改变英语学习的方式
  • 模具丫姐走进箱包厂,终于懂了客户为什么先试一套模具
  • 2026年适配维普AI智能降重工具横评:亲测8款工具,把AI率稳控在安全线内
  • 知识库管理:为什么同样的问题,有的IT团队回答一次就结束,有的团队每天都在重复解释?
  • 计算机毕业设计之基于Python的汽车租赁管理系统的设计与实现
  • 2026上海闭口楼承板现货供货商实力榜:五家技术型品牌深度解析与采购直通电话 - 品牌发掘
  • 深度解析PaddlePaddle/awesome-DeepLearning:从理论到实战的全栈深度学习资源库
  • i.MX53xD接口时序深度解析:PATA与SSI设计实战指南
  • 庐江亚上装饰:21年庐江老牌装修公司 - 资讯纵览
  • 众恒祥合(北京)工程技术有限公司-对外联系方式更新同步 - 中媒介
  • 资料难找、取数麻烦、流程重复?工业数智化落地可以这样做
  • Moneta Markets亿汇:把工具可用性做扎实,新手更容易感受到的逻辑
  • 2026高温合金厂家推荐榜:谁领跑技术前沿? - 资讯纵览
  • 古法金回收水多深?沈阳这家 S 级机构凭当日金价领跑全城 - 奢侈品回收评测
  • KMS智能激活工具终极指南:Windows和Office永久激活完整教程
  • Diabetology发布Oraglutide™口服GLP-1的突破性临床数据
  • 5步快速掌握DeepLabV3Plus语义分割:从零配置到实战部署完整教程