C++-string

在使用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++ 标准库的老牌参考文档-stringhttps://legacy.cplusplus.com/reference/string/string/

字符串是代表字符序列的对象。

标准 string 类为这类对象提供支持,它的接口与标准字节容器相似,但增加了专门用于操作单字节字符字符串的特性

string 类是 basic_string 类模板的一个实例化,它使用 char(即字节)作为字符类型,并使用默认的 char_traitsallocator 类型(更多关于该模板的信息请参见 basic_string)。

std::string类的成员类型

豆包提供的翻译如下:

1.成员类型是什么?

成员类型是std::string类内部提前定义好的「类型别名(typedef/using)」。核心作用是统一类型命名、适配泛型编程规则,同时让代码更具通用性和可维护性。

2.为什么给类型起别名?

C++ 标准库的所有容器(比如 string、vector、list、map)都遵循统一的设计规范,都会定义一套相同名称的成员类型(比如都有value_typesize_typeiterator等)。这样做的目的 是:让泛型代码(比如模板函数、模板类)可以「通用地 处理所有容器」,不需要为每个容器单独写代码------ 泛型代码只需要通过容器的「成员类型」获取所需类型,就能适配任意符合规范的容器。

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的操作能力)

相关推荐
孞㐑¥2 小时前
算法—队列+宽搜(bfs)+堆
开发语言·c++·经验分享·笔记·算法
yufuu982 小时前
并行算法在STL中的应用
开发语言·c++·算法
charlie1145141912 小时前
嵌入式C++教程——ETL(Embedded Template Library)
开发语言·c++·笔记·学习·嵌入式·etl
陳10302 小时前
C++:AVL树的模拟实现
开发语言·c++
CSDN_RTKLIB2 小时前
错进错出得到正确的字节序列
c++
zfoo-framework2 小时前
docker desktop
开发语言
闻缺陷则喜何志丹3 小时前
【前后缀分解 排序】B4274 [蓝桥杯青少年组省赛 2023] 数字游戏|普及+
c++·蓝桥杯·排序·洛谷·前后缀分解
m0_736919103 小时前
C++中的享元模式变体
开发语言·c++·算法
集芯微电科技有限公司3 小时前
15V/2A同步开关型降压单节/双节锂电池充电管理IC支持输入适配器 DPM 功能
c语言·开发语言·stm32·单片机·嵌入式硬件·电脑