在使用string类时,必须包含#include头文件以及using namespace std;
auto关键字和范围for
auto的作用 :让编译器根据初始化值自动推导变量的类型从而简化代码书写。
cpp
map<string,string>::iterator mit=dict.begin();
auto mit=dict.begin();
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量 ,后来这个不重要了。C++11中,标准委员会变废为宝赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。
用auto声明指针类型时,用 auto 和 auto* 没有任何区别,但用auto声明引用类型时则必须加&当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。
auto不能作为函数的参数,可以做返回值,但是建议谨慎使用。
auto不能直接用来声明数组。
用auto来遍历数组很爽,例如:
cpp
#include <iostream>
using namespace std;
int main()
{
int arr[] = { 1,2,3,4 };
for (auto num : arr)
{
cout << num << "";
}
return 0;
}
iterator-迭代器
STL(C++标准模板库,装了很多现成的工具)中六大组件中其中一大组件。
STL六大组件:
容器Container(eg:vector/list/map。作用:存储数据)、
算法Algorithm(eg:排序算法sort/查找算法find/复制算法copy。作用:处理数据)、
迭代器Iterator(eg:vector的begin和end。作用:连接容器和算法的桥梁)、
仿函数Functor(eg:greater,把greate作为第三个参数传给sort时可以实现让sort按从大到小排序。作用:定制算法的行为)、
适配器Adapter(eg:stack,它是基于deque实现的,通过适配器把deque的接口改成了栈的先进后出模式。作用:能修改容器的或算法的接口)、
分配器Allocator(eg:new/delete/allocator。作用:负责管理内存的分配和释放)。
iterator(像指针的东西)提供了一种通用的访问容器的方式,所有的容器都可以被这样访问。
用iterator实现的正向迭代器:
cpp
#include <iostream>
using namespace std;
int main()
{
string s1 = "hello";
string::iterator it = s1.begin();
while (it != s1.end())
{
cout << *it << " ";
++it;
}
cout << endl;
return 0;
}

反向迭代器
cpp
#include <iostream>
using namespace std;
int main()
{
string s1 = "hello";
string::reverse_iterator rit = s1.rbegin();
while (rit != s1.rend())
{
cout << *rit << " ";
++rit;
}
cout << endl;
return 0;
}

s1的rbegin指向最后一个元素,rend指向第一个元素的前一个位置。
(++rit是往左移动,让容器倒着遍历)
reverse 反转、逆置
reserve保留、预留
string-字符串类
以下内容参考该网站编写,详细内容请看原网站。
C++ 标准库的老牌参考文档-string
https://legacy.cplusplus.com/reference/string/string/
字符串是代表字符序列的对象。
标准 string 类为这类对象提供支持,它的接口与标准字节容器相似,但增加了专门用于操作单字节字符字符串的特性
string 类是 basic_string 类模板的一个实例化,它使用 char(即字节)作为字符类型,并使用默认的 char_traits 和 allocator 类型(更多关于该模板的信息请参见 basic_string)。
std::string类的成员类型

豆包提供的翻译如下:
1.成员类型是什么?
成员类型是std::string类内部提前定义好的「类型别名(typedef/using)」。核心作用是统一类型命名、适配泛型编程规则,同时让代码更具通用性和可维护性。
2.为什么给类型起别名?
C++ 标准库的所有容器(比如 string、vector、list、map)都遵循统一的设计规范,都会定义一套相同名称的成员类型(比如都有value_type、size_type、iterator等)。这样做的目的 是:让泛型代码(比如模板函数、模板类)可以「通用地 处理所有容器」,不需要为每个容器单独写代码------ 泛型代码只需要通过容器的「成员类型」获取所需类型,就能适配任意符合规范的容器。
std::string类的成员函数列表

constructor(构造函数):用来创建string对象。(比如初始化一个空字符串、用其他字符串/字符数组创建新字符串)
destructor(析构函数):当string对象生命周期结束时,自动释放它占用的内存,不需要手动调用。
operator=(赋值运算符重载):用来给string对象赋值。(比如把一个字符串的值赋给另一个字符串)
std::string的迭代器相关函数
(用于获取字符串的迭代器,是遍历字符串的工具)


std::string的容量类成员函数


std::string的元素访问类成员函数
(用于获取字符串中的单个字符)


这些函数是字符串单字符操作的基础:
追求效率时用operator[],追求安全性时用at;
back和front是C++新增的便捷接口,避免了手动计算下标。
std::string的字符串操作类成员函数
(覆盖了字符串的转换、复制、查找、子串生成等核心功能)


标红的地方为字符串处理的高频工具。
std::string的内容修改类成员函数
(用于对字符串内容进行增删改换等操作)


这些函数是字符串内容编辑的核心工具:
- 追加操作优先用
operator+=(简洁)或push_back(单字符); replace比 "先 erase 再 insert" 更高效,是修改局部内容的首选;swap常用于快速交换字符串,避免大字符串拷贝的性能开销。
std::string的非成员函数重载
(不属于string类内部,而是全局作用域的函数,用于扩展string的操作能力)

