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

相关推荐
端平入洛1 天前
auto有时不auto
c++
郑州光合科技余经理2 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1232 天前
matlab画图工具
开发语言·matlab
dustcell.2 天前
haproxy七层代理
java·开发语言·前端
norlan_jame2 天前
C-PHY与D-PHY差异
c语言·开发语言
哇哈哈20212 天前
信号量和信号
linux·c++
多恩Stone2 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ4022054962 天前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django
遥遥江上月2 天前
Node.js + Stagehand + Python 部署
开发语言·python·node.js
蜡笔小马2 天前
21.Boost.Geometry disjoint、distance、envelope、equals、expand和for_each算法接口详解
c++·算法·boost