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可以看成一个存在char的vector.
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_PORT的string的Blog.
在VC6中不推荐使用默认的string,可能有危险出现。有点虎头蛇尾,失望!
- C++编程思想(第2卷)之深入探索string
- C++编程思想(第2卷)之异常
- C++编程思想第二版第二卷读书笔记2——深入学习string类
- C++编程思想(第2卷)之查找内存泄漏
- <<C++编程思想 第2卷>>读后感
- 读书笔记《C++编程思想》第1卷 第2章
- C ++ 编程思想(卷一) 笔记
- C ++ 编程思想(卷二) 笔记
- C ++ 编程思想(卷一) 笔记
- C ++ 编程思想(卷二) 笔记
- C++编程思想(卷二):深入理解字符串
- C++编程思想(卷二):深入理解模板
- C++编程思想(卷二):深入理解字符串
- 《c++编程思想第2卷》第四章练习题4-15答案
- 模板(C++编程思想第二卷)
- 《C++编程思想》(第一卷)观后感
- 深入探索C语言之结构体(struct)
- java编程思想之字符串深入(正则表达式)
- 用BT下载文件容易破坏硬盘??
- 图论算法
- pmger 5 翻译计划夭折
- 软件开发周期简记
- 自定义log4j的Appender
- C++编程思想(第2卷)之深入探索string
- 快郁闷死了
- 评《为什么PHP令人不爽(对于大型系统)》
- 聊天室应用程序 需求分析
- 信息学竞赛的相关资料网址收藏
- 网页找不到数据库
- Smart Client智能客户端技术初探
- 触发器
- 一个Web系统的界面设计和开发.1