C++编程思想(第2卷)之深入探索string

       以前string用的很少,一般使用char array或者CString,之所以不使用,是因为还不了解string的机制,不会用而并非因为string不好用。本文结合string的源码,深入探索string的用法。

       那么从构造开始:

basic_string(const E *s, const A& al = A());//字符串 

basic_string(const E *s, size_type n, const A& al = A());//字符串加长度

basic_string(const basic_string& rhs);//string对象

basic_string(const basic_string& rhs, size_type pos, size_type n,const A& al = A());

basic_string(size_type n, E c, const A& al = A());//长度和字符,复制多个字符

explicit basic_string(const A& al = A());

basic_string(const_iterator first, const_iterator last,const A& al = A());

       这里面以basic_string的构造为主。看一下A,其实就是内存分配策略。const E*代表的是字符串,还有一些位置和长度之类的参数。String可以看成一个存在charvector.

       string拥有自已的iterator,string来说,iterator就是指针。

       再来看一些操作:

basic_string& append(const E *s);

basic_string& append(const E *s, size_type n);

basic_string& append(const basic_string& str,size_type pos, size_type n);

basic_string& append(const basic_string& str);

basic_string& append(size_type n, E c);

basic_string& append(const_iterator first, const_iterator last);

这是字符串的增加。用法和构造函数基本上类似。

basic_string& insert(size_type p0, const E *s);

basic_string& insert(size_type p0, const E *s, size_type n);

basic_string& insert(size_type p0,const basic_string& str);

basic_string& insert(size_type p0,const basic_string& str, size_type pos,size_type n);

basic_string& insert(size_type p0, size_type n, E c);

iterator insert(iterator it, E c);

void insert(iterator it, const_iterator first, const_iterator last);

void insert(iterator it, size_type n, E c);

这里可以选择不同的参数,而决定不同的方式在字符串中插入新的内容。

void reserve(size_type n = 0);

       这个函数在VC中好像并不管用,这让我觉得比较郁闷,在Linux下用了g++结果也不一样,由此得到结论,不同编译器中string的实现是不一样的。

       我查找了string的实现,发现在VC6上对STL使用了一些看似巧妙的方式。String的实现采用了浅拷贝的方式,这并不是一个好的方式。实践证明这在多线程的程序中会出现错误。这以后会多一篇关于STL_PORTstringBlog.

VC6中不推荐使用默认的string,可能有危险出现。有点虎头蛇尾,失望!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值