网站模板哪里好,国内能用的搜索引擎,给我免费看播放片,郑州市做网站公司a汉狮#1024程序员节#xff5c;征文# 文章目录 繁星点点映夜空#xff0c;晨曦微露照前程1.string的基本概念2.标准库中的string类2.1 string类2.2 auto和范围for2.3 string类常用的接口2.4 string类对象的容量操作2.5 string类对象的访问及遍历操作2.6 string类对象的修改操作2…#1024程序员节征文# 文章目录 繁星点点映夜空晨曦微露照前程1.string的基本概念2.标准库中的string类2.1 string类2.2 auto和范围for2.3 string类常用的接口2.4 string类对象的容量操作2.5 string类对象的访问及遍历操作2.6 string类对象的修改操作2.7 string类非成员函数 繁星点点映夜空晨曦微露照前程
1.string的基本概念
string是STL标准模板库中的字符串类型用于表示和操作字符串数据。它是一个类封装了char*字符指针并管理该字符串的内存分配和释放用户无需担心内存管理问题。
2.标准库中的string类
2.1 string类
string类的文档介绍
2.2 auto和范围for
auto关键字 auto关键字被用于自动类型推断。意味着编译器会根据初始化表达式来自动确定变量的类型从而免去了显式指定类型的麻烦。 •使用场景
➀简化代码 当一个变量的类型名称特别冗长或复杂时使用auto可以使代码更加简介明了。 ➁与范围for结合 在范围for中auto关键字是必须的因为循环变量会被自动推导为容器元素的类型。 ➂避免类型错误 使用auto可以减少因类型不匹配而导致的编译错误因为编译器会负责类型推导。 •注意事项 ➊类型推导规则auto的类型推导遵循一组特定的规则这些规则与模板类型推导类似。当在同一行声明多个变量时这些变量必须是相同类型否则将会编译报错实际上编译器只对第一个变量进行推导然后用推到出来的类型定义其他变量。 ➋不能用于推导数组类型auto不能用于推导数组类型。如果尝试用auto来声明一个数组变量编译器会报错。 ➌auto不能作为函数的参数: auto不能作为函数的参数,但可以作返回值但需要谨慎使用。 ➍**auto声明指针类型**用auto声明指针类型时用auto和auto*没有任何区别但用auto声明引用类型时则必须加
#includeiostream
using namespace std;int func1()
{return 10;
}void func2(auto a)//不能做参数
{}auto func3()//可以做返回值但是需谨慎使用
{return 3
}int main()
{int a 10;auto b a;auto c a;auto d func1();auto e;//编译报错‘e’:类型包含“auto”的符号必须具有初始化值的设定项auto aa 1, bb 2;auto cc 3, dd 4.0;//编译报错在声明符列表中“auto”必须始终推导为同一类型auto array[] {4,5,6};//编译报错数组不能具有其中包含“auto”的元素类型return 0;
}范围for 范围for循环Range-based for loop是一种简化的for循环语法它允许我们遍历容器比如数组向量vector列表list等或其他序列类型中的所有元素而无需使用迭代器或下边。 范围for的基础语法如下
for(auto element : container)其中element是循环中每次迭代时的当前元素container是要遍历的容器或者序列。auto关键字用于自动类型推导编译器会根据container中的元素类型来推导element的类型。 例子 1.遍历数组
int arr[] {12345}
for(auto e : arr)
{std::cout e ;
}
//输出:1 2 3 4 52.遍历向量vector
std::vectorstd::string vec {hello, world!};
for(auto str : vec)
{std::cout str ;
}
//输出hello world!2.3 string类常用的接口
1.string对象的常见构造
constructor函数名称功能说明string() 默认构造函数构造空的string类对象即空字符串string(const char * s)用C-string来构造string类对象stringsize_t n,char cstring类对象中包含n个字符cstring(const string s)拷贝构造函数 •默认构造函数 原型string **说明**构造一个空字符串 示例
#includeiostream
#includestring
using namespace std;int main()
{string s1;cout 默认构造函数构造的字符串s1: s1 endl;cout 字符串长度 s1.size() endl;return 0;
}输出结果为空字符串且长度为0. •C字符串构造函数 原型stringconst char * s 说明 用C风格字符串s以’\0’结束的字符序列来构造新的字符串。 示例
#includeiostream
#includestring
using namespace std;int main()
{string s2(abcdef);cout C字符串构造函数构造的字符串s2: s2 endl;cout 字符串长度 s2.size() endl;return 0;
}输出结果为C风格字符串的内容且长度与C风格字符串相同 •填充构造函数 原型string(size_t n,char c) 说明 创建一个包含n个字符c的新字符串 示例
#includeiostream
#includestring
using namespace std;int main()
{string s3(6,a);cout C字符串构造函数构造的字符串s3: s3 endl;cout 字符串长度 s3.size() endl;return 0;
}输出结果为6个a的字符串 •拷贝构造函数 原型stringconst string str 说明 构建一个复制的结构即创建一个新的字符串对象其内容与给定的字符串对象str相同。 示例
#includeiostream
#includestring
using namespace std;int main()
{string s0 abcdefgh;string s4(s0);cout C字符串构造函数构造的字符串s4: s4 endl;cout 字符串长度 s4.size() endl;return 0;
}输出结果为原字符串且长度与原字符串相同。
2.4 string类对象的容量操作
函数名称功能说明size返回字符串有效字符的长度length返回字符串有效字符的长度capacity返回空间总大小empty检测字符串释放为空串是返回ture,否则返回falseclear清空有效字符reserve为字符串预留空间resize将有效字符的个数改为n个多出的空间用字符c填充
❗️注意 •size()与length()方法底层实现原理完全相同引入size()的原因是为了与其他容器的接口保持一致一般情况下都使用size()。 •clear()只是将string中的有效字符清空不改变底层空间大小。 •resze(size_t n)与resize(size_t n ,char c)都是将字符串中有效字符的个数改变到n个不同的是当有效字符的个数增多时resize(size_t n)是用0来填充多余的元素空间而resize(size_t n,char c)是用字符c来填充多余的空间。resize在改变元素个数使如果是将元素个数增多可能会改变底层容量空间的大小如果是将元素个数减少底层空间总大小不变。 •reserve(size_t res_arg0):为string 预留空间不改变有效元素个数当reserve的参数小于底层空间总的大小时reserve 不会改变容量的大小。
2.5 string类对象的访问及遍历操作
函数名称功能说明operator[]返回pos位置的字符begin返回一个指向字符串第一个字符的迭代器。end返回一个指向字符串末尾后的字符的迭代器。rbegin返回一个指向字符串最后一个字符的反向迭代器即它的反向开头。rend返回一个反向迭代器指向字符串第一个字符前面的理论元素被认为是字符串的反向结束。范围forfor的新型遍历方式
2.6 string类对象的修改操作
函数名称功能说明push_back在字符串后尾插字符cappend在字符串后追加一个字符串operator在字符串后追加字符串strc_str返回c格式字符串findnpos从字符串pos位置开始往后找字符c返回该字符在字符串中的位置rfind从后向前查找字符csubstr在str中从pos位置开始截取n个字符然后将其返回
❗️注意 •在string尾部追加字符时s.push_back /s.append/s.c’三种的实现方式差不多一般情况下string 类的操作用的比较多操作不仅可以连接单个字符还可以连接字符串。 •对string操作时如果能够大概预估到放多少字符可以先通过reserve把空间预留。
2.7 string类非成员函数
函数名称功能说明operator连接字符串尽量少用因为传值返回导致深拷贝效率降低operator输入运算符重载operator输出运算符重载getline获取一行字符串relational operators大小比较