STL——string

string的构造

模板库是使用类来封装的, 所以每个容器都可以看成是一个独立的类. 既然有了类, 那么就会有构造函数了.string类也是通过构造函数来进行实例化的.
string常用的构造函数有:

string();//构造一个空的string类对象
string(const char* s);//用C风格字符串构造string类对象
string(size_t size,char c);//构造一个string类对象, 包含size个c字符
string(const string& s);//通过拷贝构造string类对象

string申请的是堆上的空间, 所以STL提供了一些函数让我们获取它的容量属性:

string s;
s.size();//获取有效字符串长度
s.length();//同上,没有区别
s.capacity(); //获取空间总大小,空间会自动扩容,不需要我们操作
s.empty();//判断字符串是否为空
s.clear();//清空有效字符
s.reserve(x);//为字符串预留x个字节的空间
s.resize(size_t n, char c);//改变有效字符个数到n个,增加时,使用c来进行填充, 
						   //如果没有参数c,就用0来填充,
						   //有效字符增加可能会产生扩容

string的迭代器和访问操作

string可以使用迭代器对数据进行访问:

string s("kishere");
string::iterator it;//定义一个string类对象的迭代器(正向)

同时, string还提供了一些操作让我们更方便地对数据进行访问:

s[1];//获取第二个位置的字符
it = s.begin();//获取第一个位置的迭代器
string::reverse_iterator rit;//定义一个string类对象的迭代器(反向)
it = s.end();//获取最后一个字符下一个位置的迭代器
it = s.rbegin();//获取最后一个字符位置的反向迭代器
it = s.rend();//获取第一个位置的反向迭代器

迭代器支持’++’, '- -'操作来获取下一个位置, 但是要注意的是反向迭代器++是获取当前字符的前一个字符.

string的修改

通过STL提供的相关函数可以进行相关的修改操作.

s.pushback('C');//向string类对象s的末尾插入字符C
s.append(str);//向string类对象s末尾追加字符串str
s+=str;//同上
s.c_str();//将string类对象s转为c_str返回

深拷贝

在类和对象中我们讨论了关于浅拷贝的问题. 在类中有资源管理时, 使用默认的拷贝构造函数. 拷贝和被拷贝的两个指针指向同一块内存空间, 在释放内存时, 会使内存被释放两次, 导致程序崩溃. 这就是所谓的浅拷贝.
在涉及资源管理的类中, 拷贝构造函数必须显式给出:

class string{
public:
	string(const string& s)
		:_str(new char[strlen(s._str)+1])
	{
		strcpy(_str,s._str);
	}
private:
	char* _str;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值