一、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;
}
###运行结果: