文章目录
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;
如果对你有帮助的话点一下赞,谢谢