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

来源:互联网 发布:1421中国发现世界 知乎 编辑:程序博客网 时间:2024/06/12 19:25

       以前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,可能有危险出现。有点虎头蛇尾,失望!