当前位置: 首页 > 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.jsqmd.com/news/982733/

相关文章:

  • 2026年AI编程工具免费付费推荐榜单
  • i.MX 6UltraLite引脚分配与硬件设计实战指南
  • 2026年不做GEO优化,老板你将错失啥?
  • NoFences:5分钟彻底告别杂乱桌面,这款免费开源神器让Windows效率翻倍
  • gradle国内镜像地址
  • 如何在Windows上安装安卓应用?APK安装器的完整使用指南
  • ARM Cortex-M0+微控制器外设驱动与内存映射实战解析
  • 学术双审时代,paperxie 拆解论文降重与 AIGC 淡化的分层解决方案
  • 在上海回收黄金怕被坑?这五家靠谱门店精选推荐,附避坑指南 - 奢侈品回收评测
  • 如何利用BiliTools的AI视频总结功能实现3倍学习效率提升
  • 无线芯片功耗与射频性能实战解析:从数据手册到PCB设计
  • 猫抓浏览器扩展:一站式网页视频资源下载解决方案完全指南
  • 瑞芯微RV1126B开发板(EASY-EAI-PI2) WIFI STA
  • 阿里算法岗 0530笔试真题 - 多约束条件下的元素匹配统计
  • 企业级GB28181视频监控平台:构建统一安防系统的终极解决方案
  • 如何在Photoshop中直接使用Stable Diffusion?5分钟快速上手终极AI插件指南
  • 广州服装货源怎么找?AI穿搭教学+拿货避坑指南,这个穿搭博主藏了太多干货 - 资讯纵览
  • 西科大数电实验四:D/ JK/ RS触发器FPGA实现与Diamond波形仿真全套工程文件
  • 嵌入式系统设计:从数据手册到实战,解析KL82模拟外设与电气规格
  • Horizon RDS场实战:从安全策略配置到应用程序池权限管理的完整避坑指南
  • 客户投诉率降低95%!往复式洗车机如何赋能洗车连锁门店转型升级? - 资讯纵览
  • i.MX53引脚配置全解析:从数据手册到硬件设计的实战指南
  • 从零到精通:Draw.io Mermaid插件完全指南
  • 屈光发育档案:一个儿童视力数据追踪系统——以及它为什么比单次验光能提供更多判断依据
  • UniApp扫码功能商业化升级指南:如何像支付宝/微信一样‘秒扫’(基于mPaaS插件)
  • 3Tops NPU + 4核高性能架构:灵眸科技EASY-EAI-PI2开发板,为边缘AI开启“easy模式”
  • 让Mac文件预览体验提升10倍的秘密武器:50+款QuickLook插件深度解析
  • STM32多型号串口DMA收发工程包:空闲中断+环形缓冲+RTOS兼容方案
  • 投资金条变现攻略!9家机构横评,2026沈阳大盘价贴合度真实排行 - 奢侈品回收评测
  • git查看远端文件(skip-worktree状态中的文件管理)