STL中的string类

本文介绍了C++ STL中的string类,包括其作为basic_string模板类实例的特性,构造函数,容量操作如size(), length(), clear(), resize()和reserve()的方法,以及访问与遍历、修改操作。特别强调了预估容量以提高效率和避免使用低效的insert和erase操作。" 102680030,8459088,Maven项目导入jstl标签库常见问题与解决方案,"['Maven', 'jstl', 'servlet-api', '配置错误', 'Web开发']
摘要由CSDN通过智能技术生成


一、string类对象是什么?

string在底层实际是basic_string模板类的别名
typedef basic_string<char, char_traits, allocator> string

template<class T>
class basic_string
{
   
private:
T* _str;//可以是char、wchar_t等
}

string类是basic_string模板类的一个实例,虽然大多数时候我们使用的string类型都是用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数,但是考虑到编码的问题,除了char还有wchar_t(两字节)、char16_t、char32_t等,所以string也只是basic_string模板类的一个实例
在这里插入图片描述

二、string的构造函数:

在这里插入图片描述

// string constructor
#include <iostream>
#include <string>

int main ()
{
   
  std::string s0 ("Initial string");

  // constructors used in the same order as described above:
  std::string s1;//调用默认构造函数
  std::string s2 (s0);//调用拷贝构造函数
  std::string s3 (s0, 8, 3);//截取,从给定的字符串对象的第8个位置往后截取三个长度
  //如果不写后面的3就默认截取到字符串结束 npos是string里的一个静态变量,代表整形的最大值
  std::string s4 ("A character sequence");//from c-string 拷贝一个常量字符串
  std::string s5 ("Another character sequence", 12);//从给定c-string的开始位置截取12个长度
  std::string s6a (10, 'x');//fill 用10个x fill对象
  std::string s6b (10, 42);      // 42 is the ASCII code for '*' 也是fill
  std::string s7 (s0.begin(), s0.begin()+7);//用某个对象的迭代器区间初始化,从初识位置往后7个长度

  std::cout << "s1: " << s1 << "\ns2: " << s2 << "\ns3: " << s3;
  std::cout << "\ns4: " << s4 << "\ns5: " << s5 << "\ns6a: " << s6a;
  std::cout << "\ns6b: " << s6b << "\ns7: " << s7 << '\n';
  return 0;
}

在这里插入图片描述


三、string类对象的容量操作

在这里插入图片描述

#include <iostream>
#include <string>

int main ()
{
   
  std::string str ("Test string");
  
  std::cout << "The size of str is " << str.size() << " bytes.\n";
  //size函数,求字符串长度 这里是11 包含空格但是没有'\0',计算的是有效字符的长度
   
   std::cout << "The size of str is " << str.length() << " bytes.\n"
   //length函数,与size函数功能一样,推荐使用size()函数,因为别的STL容器也是用的size()函数
   
   std::cout << "max_size: " << str.max_size() << "\n";
   //输出字符串的最长长度,没什么意义,一般max_size:是4294967291

	std::cout << "capacity: " << str.capacity() << "\n";
	//输出字符串可以存储的有效字符的容量,比如一个字符串的容量是16(包含最后的'\0'),但是可能只有5个有效字符,size()就是5,但是capacity是15(去掉了最后的'\0'),capacity>=size 
 	
 	str.clear();
 	//直接清空str字符串 str变成空串,但是它的capacity还是存在的&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值