c++中的String

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;

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

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dabai__a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值