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

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;

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

相关文章:

  • 爬虫----robots.txt 协议简介
  • Springboot+vue的学生成绩管理系统(有报告),Javaee项目,springboot vue前后端分离项目。
  • 短视频账号矩阵系统源码
  • 解密网络世界的秘密——Wireshark Mac/Win中文版网络抓包工具
  • 理财和银保区别
  • 设计模式--模板方法外观模式
  • 【风险管理】MT4外汇交易新手指南:掌握资金管理的重要性
  • Redis(集合Set和有序集合SortedSet)
  • JAXB的XmlElement注解
  • Linux学习教程(第四章 Linux打包(归档)和压缩)
  • Flume学习笔记(2)—— Flume进阶
  • The import xxx.xxx.xxxx is never used
  • rpc依赖安装
  • Qt调起Mac“系统设置”面板
  • Ubuntu18.04平台下Qt开发程序打包的一些问题总结
  • 最新自动定位版本付费进群系统源码
  • Vue3-ref、reactive函数的watch
  • [工业自动化-23]:西门子S7-15xxx编程 - 软件编程 - 西门子PLC人机界面交互HMI功能概述、硬件环境准备、软件环境准备
  • 【电路笔记】-快速了解无源器件
  • C#密封类和密封成员
  • 江西3人拟提名为县(市、区)长候选人
  • 杞支雅男评《1517》|放眼世界,立足德国
  • 李家超:明日起香港特区护照持有人可免签入境阿联酋
  • 杭州“放大招”支持足球发展:足球人才可评“高层次人才”
  • 这个“超强致癌细菌”,宝宝感染率高达40%,预防却很简单
  • 女高音吴睿睿“古词新唱”,穿着汉服唱唐诗宋词