一、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表示清空 size
	string 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;
	//at
	cout << "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;
}###运行结果:










![[引人深思]博彩用户真的赢了吗?——多维度揭示赌博危害](https://img-blog.csdnimg.cn/img_convert/6c35964a5271dc66e67067e0feff2772.png)







