当前位置: 首页 > news >正文

C++ string类—容量、元素获取

一、Capacity

  • size:string类对象中字符的个数为size;
  • length:size作用一样,返回string对象中有效数据个数;
  • capacity:一个string对象的容量capacity决定了这个对象能存储多少字符(不包括'\0');
  • max_size:表示这个string类的对象能存储的最大字符个数;
  • resize:将一个string类对象的size值进行重新赋值:给定的值比size小,那么就减少string类中的数据;给定的值比size大,没有给增加的具体数据值,默认为空字符,给了具体值,那么增加的size的位置就是这些值;
  • reserve:重新设置capacity的值:若是重新给定的值比原capacity大,那么就扩大capacity,并且优化大小;若是比原capacity小或者介于size和capacity之间,在VS中默认capacity的值不变;
  • clear:清楚字符,使size为0;
  • empty:检查string对象中是否含有字符,即判空;
  • shrink_to_fit:将capacity的值调整为size;

###代码示例:

//capacity
void Capacity_Test()
{string s1("Capacity Test");//size和 length 都是返回这个字符串的字符个数cout <<"size:" << s1.size() << endl;cout <<"length:" << s1.length() << endl;cout << endl;//max_size返回这个字符串能达到的最大长度cout <<"max_size:" << s1.max_size() << endl;cout << endl;//resize改变 size 直到一个指定值,也就是有效字符个数s1.resize(12);cout << s1 << endl;//若是增大,可以设置增大位置的值,不设置,那么默认是空字符,但是不会占位s1.resize(13, 't');cout << s1 << endl;s1.resize(14);//理论上14处是空字符,后面再 resize 之后打印此处会留一个空格,但是这个空字符不占位s1.resize(20, 'i');cout << s1 << endl;cout << endl;//capacity表示字符串的容量,不算'\0'cout <<"capacity:" << s1.capacity() << endl;//观察插入字符之后,capacity的扩容string s2;for (int i = 0; i < 100; i++){s2 += 'x';if (s2.capacity() == s2.size()){cout << s2.capacity() << " ";}}cout << s2.capacity() << endl;cout << endl;//reserve表示容量设置string s3("Reserve Test");cout <<"capacity:" << s3.capacity() << endl;cout <<"size:" << s3.size() << endl;s3.reserve(13);//VS里面 reverse 的比 capacity 小,一律不改变 capacity,比 capacity 大,会扩大并且可以优化大小cout <<"capacity:" << s3.capacity() << endl;s3.reserve(30);cout << "capacity:" << s3.capacity() << endl;cout << endl;//clear表示清空 sizestring s4("Clear Test");cout <<"size:" << s4.size() << endl;s4.clear();cout <<"size:" << s4.size() << endl;cout << "capacity:" << s4.capacity() << endl;cout << endl;//empty判空,即看 size 是否为0 (true if the string length is 0, false otherwise)string s5("Empty Test");s5.empty() ? cout << "true" << endl : cout << "false"<<endl;string s6;s6.empty() ? cout << "true" << endl : cout << "false" << endl;cout << endl;//shrink_to_fit表示将 capacity 调整为 size 大小。但是不是强制性的,在VS里面将 capacity 不会比当前的值小string s7("Shrink_To_Fit_Test");cout << "size:" << s7.size() << endl;cout << "capacity:" << s7.capacity() << endl;s7.shrink_to_fit();cout << "capacity:" << s7.capacity() << endl;cout << endl;
}

###运行结果:


二、Element access

这些成员函数是获取string类里面的元素的;

  • operator[]:重载[],使string对象可以通过[]加下标的方式访问string里面的元素;
  • at:和operator[]类似,但是访问元素时写成,s1.at(0)(s1为string对象,0为下标);
  • front:获取string类对象的第一个数据;
  • back:获取string对象的最后一个有效数据;

###代码示例:

void Element_access()//此中的函数返回值都是引用,所以可以通过返回值改变原字符串中对应的字符;但若是 const 限制的就不能改变
{//operator[]cout << "operator测试:" << endl;//重载[],让字符串可以通过下标的方式访问字符string s1("Operator_Test");// 输出O,第一个字符cout << s1[0] << endl;//若是'\0',则输出空字符cout << s1[s1.size()] << endl; //非 const 的 string 类可以通过下标改变此处的字符s1[0] = 'L';cout << s1 << endl;//const类型的 string 不能通过改变const string s2(s1);//s2[0] = 'O'; //报错cout << endl;//atcout << "at测试:" << endl;//at通过下标访问,越界则会引发异常(out_of_range)string s3("At_Test");for (size_t i=0;i<s3.size();i++){cout << s3.at(i);}cout << endl;//s3.at(100) = 'i';s3.at(0) = 'X';cout << s3 << endl;cout << endl;//back//back返回 string 类对现象的最后一个有效字符;不能使用在空字符串上面cout << "back测试:" << endl;string s4("Hello World.");cout << s4 << endl;s4.back() = '!';cout << s4 << endl;//若是空的 string 类,则报错(call on empty string)//string s5;//cout << s5.back() << endl;cout << endl;//front //返回 string 类对象中的第一个字符,若是空 string 对象,报错string s6("front_Test");cout << s6 << endl;s6.front() = 'F';cout << s6 << endl;
}

###运行结果:


http://www.mrgr.cn/news/17361.html

相关文章:

  • 数据图像处理26
  • jQuery库
  • Vue 3 Composition API 中如何正确添加表单项副本到数组
  • 单片机内存区域划分
  • SPI驱动学习二(驱动框架)
  • 网络层IP协议
  • Linux 常用命令 - hexdump 【以指定格式显示文件内容】
  • 今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 9月1日,星期日
  • 创建 AD9361 的 vivado 工程,纯FPGA配置,不使用ARM程序
  • docker技术详解,带你全方面玩懂docker
  • 国庆节微信头像怎么制作?制作国庆国旗节日头像的4个方法
  • SpringCloud-01
  • Java-多线程机制
  • AI问答:.NET核心组成概要、程序运行步骤和查询SDK版本的方法
  • 41°29‘29.06“ N 12°31‘25.08“ E表示什么含义?
  • 力扣435-无重叠区间(Java详细题解)
  • vue,小程序,uni-app的生命周期
  • 文件上传的学习
  • FactoryBean 实战练习 - 注入自定义 Date
  • 对字符、字符串的研究