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

c++中的String

文章目录

  • String
    • 定义对象的方式
    • 成员函数
      • operator=
      • begin/end
      • size
      • capacity
      • reserve
      • rsize
      • operator+=/append/push_back
      • operator[]/at

String

String是一个类模版,可以定义一个字符/字符串对象。
字符顺序表

定义对象的方式

定义方式有很多重要的就这几种

	string s1;
	string s2("hello word");
	string s3 = s2;
	string s4(s2);

成员函数

下面的成员函数中有些是很不常用的,这里会整理出常用的几个
在这里插入图片描述

operator=

让一个string对象 可以赋值成另一个 string对象/字符串/字符

int main()
{
	string s1 = "hello";
	cout << s1;
	return 0;
}

begin/end

begin: 配合迭代器等东西使用,指向对象的开始
end:配合的迭代器使用,指向对象的结束

	string::iterator it = s1.begin();
	while (it != s1.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;

size

定义的对象的长度

string s1("hello");
cout<<s1.size();

capacity

当前定义的对象的容量大小

string s1("hello");
cout << s1.capacity() << endl;

reserve

设置容量
每个编译器的容量可能大小有差异,取决于这个编译器使用什么版本的STL
如果当前对象的capacity小于reserve 那么就是扩容
在vs下是 1.5倍的扩容
在gcc下是 2倍扩容
如果 capacity>reserve 那么有可能缩容
在vs下 reserve 是不会缩容的
在gcc下 是会缩到 reserve的长度,当reserve<size,那么会缩到有效数组大小的长度(size)

int main()
{
	string s1;
	//检测扩容机制
	//每个编译器 扩容都不同
	int a = s1.capacity();
	string s2("hello word");
	s1.reserve(500);
	//如果确定自己需要多少空间
	//reserve 设置容量
	//不同编译器 扩容 会扩500或者以上
	//在vs下 reserve下 没数据下/有数据下:只会扩容
	//在gcc下 没数据可以缩容
	//有数据下如果缩的比有效数据低 那么 他会缩到 有效数据的结尾
	//reserve 不会影响数据  只影响容量
	//g++ 会根据你扩容直接扩容
	//vs会有对齐规则 扩容多一点

rsize

和reserve类似,rsize是设置容量,并且会影响数据
如果是扩容的话 那么他会在有效数据后扩容并且初始化成\0
resize > capacity 那么就是扩容+尾插
如果 size<n<capacity 如果在这个区间 只会插入数据
如果 n<size 删除数据 空间不变 保留前n个数据

//rsize -既影响容量 又影响数据
cout << s2.size() << endl;
cout << s2.capacity() << endl;
//resize 如果是扩容的话 那么他会在有效数据后扩容并且初始化成\0
//resize > capacity 那么就是扩容+尾插
s2.resize(100);
//s2.resize(100,'x');如果是这样子的话 就是有效数据后插入x 到size结束
cout << s2.size() << endl;
cout << s2.capacity() << endl;

//如果 size<n<capacity 如果在这个区间 只会插入数据 
s2.resize(12);
cout << s2.size() << endl;
cout << s2.capacity() << endl;
//如果 n<size ->删除数据 空间不变 保留前n个数据
s2.resize(5);
cout << s2.size() << endl;
cout << s2.capacity() << endl;
cout << s2;

operator+=/append/push_back

这些都是插入成员函数
operator+= 直接尾部插入···
append 插入一个string对象/一个插入···
push_back 尾插

int main()
{
	string s1("hello word ");
	// append 插入 一个字符串 ···
	s1.append("dabai ");

	string s2 = " aaaaaaa";
	//+= 插入
	s1 += 'x';
	s1 += 'word';
	s1 += s2;

operator[]/at

下标访问

	//at()==[]
	string s2("hello word");
	cout << s2.at(20) << endl;
	return 0;

如果对你有帮助的话点一下赞,谢谢


http://www.kler.cn/a/134241.html

相关文章:

  • ArcGIS Pro属性表乱码与字段名3个汉字解决方案大总结
  • AI绘画经验(stable-diffusion)
  • 【Hadoop实训】Hive 数据操作①
  • EasyExcel 使用多线程按顺序导出数据
  • 使用HTML、CSS和JavaScript创建动态圣诞树
  • Apache ECharts
  • 【算法】石子合并(区间dp)
  • Python学习之——正则表达式
  • 深度学习入门(第三天)——卷积神经网络
  • LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve
  • 系统移植-uboot
  • 012 C++ AVL_tree
  • 创邻科技亮相ISWC 2023,国际舞台见证知识图谱领域研究突破
  • 【kerberos】使用 curl 访问受 Kerberos HTTP SPNEGO 保护的 URL
  • 单张图像3D重建:原理与PyTorch实现
  • JS原型对象prototype
  • 【Android】使用Retrofit2发送异步网络请求的简单案例
  • devops底层是怎么实现的
  • 环境配置|GitHub——解决Github无法显示图片以及README无法显示图片
  • python趣味编程-5分钟实现一个俄罗斯方块游戏(含源码、步骤讲解)
  • asp.net心理健康管理系统VS开发sqlserver数据库web结构c#编程计算机网页项目
  • JAVA深化篇_42—— 正则表达式
  • 14 Go的类型转换
  • X3DAudio1_7.dll丢失原因,X3DAudio1_7.dll丢失怎样解决分享
  • RabbitMQ消息的可靠性
  • 单元测试实战(三)JPA 的测试