文章目录1.string1.1string的几种初始化方式2.auto关键字3.string类对象的几种修改操作4.string类非成员函数5.拷贝5.1浅拷贝5.2深拷贝5.3写时拷贝1.string在使用string类时必须包含#include string头文件以及using namespace std;1.1string的几种初始化方式s1 默认构造s2用C字符串初始化s3拷贝构造s4子串构造s5子串构造只给起始位置s6从C字符串取前n个字符s7重复字符构造string s1; string s2(hello world); string s3(s2); string s4(s2, 6, 1000);//第二个参数是起始位置第三个参数是长度 如果长度超过了字符串的长度则取到字符串的末尾 const string s5(s2, 6);//不传第三个参数默认取到字符串的末尾 string s6(hello world, 5); string s7(5, n); cout s1 endl; cout s2 endl; cout s3 endl; cout s4 endl; cout s5 endl; cout s6 endl; cout s7 endl; cout **************** endl;代码结果hello world hello world world world hello nnnnn ****************2.auto关键字在早期C/C中auto的含义是使用auto修饰的变量是具有自动存储器的局部变量后来这个不重要了。在C11中标准委员会变废为宝赋予auto全新的含义即auto不再试一个存储类型指示符了而是作为一个新的类型指示符来指示编译器auto声明的变量必须由编译器在编译时期推导而得。用auto来声明指针类型时候auto和auto*没有任何区别但是用auto声明引用类型时则必须加。当在同一行声明多个变量时这些变量必须是相同的类型否则编译器将会报错因为编译器实际只对第一个类型进行推导然后用推导出来的类型定义其他变量。auto不能作为函数的参数可以做返回值但是这种做法建议谨慎使用。auto不能直接用来声明数组。3.string类对象的几种修改操作push_back()在字符串后面尾插一个字符。append():在字符串后追加一个字符串。operator在字符串后追加字符串。c_str()返回C格式字符串。substr()在str中从pos位置开始截取n个字符然后将其返回。4.string类非成员函数operator传值拷贝会导致低效率。operator输出运算符重载。operator输入运算符重载。getline:获取一行字符串直至遇到换行符才停止获取relational operators:大小比较5.拷贝5.1浅拷贝也称为位拷贝编译器只是将对象中的值拷贝过来如果对象中管理资源最后就会导致多个对象共享同一份资源当一个对象销毁时就会将该资源释放掉而让另一些对象不知道资源已经释放掉对该资源进行访问的时候就会报错。5.2深拷贝为了避免浅拷贝可能出现的问题深拷贝使每一个对象都有一份独立的资源不需要和其他对象共享。一般适用于类中资源的管理包括其拷贝构造函数赋值运算符重载以及构造函数必须要显式给出。5.3写时拷贝写实拷贝是在浅拷贝的基础上增加引用技术的方式来实现的其意向也和深拷贝一样防止浅拷贝可能出现的越界问题引用计数用来记录资源使用者的个数。在构造时将资源的计数给成1每增加一个对象使用该 资源就给计数增加1当某个对象被销毁时先给该计数减1然后再检查是否需要释放资源 如果计数为1说明该对象时资源的最后一个使用者将该资源释放否则就不能释放因为还有 其他对象在使用该资源。