目录
1.有关深拷贝与浅拷贝的问题
浅拷贝指向的是同一块命名空间,所以在析构和修改时会造成不必要的麻烦。
浅拷贝:
优化为深拷贝:
2.运算符重载实现赋值操作(也属于拷贝构造)(A=B)
有多种情况:
a.两个空间差不多
b.一大一小
c.一小一大
实现复杂,于是改为直接释放A,另开辟新的空间来存放和B一样的内容。
但是这也有不少问题:比如说s1=s1,已经把s1释放掉了,是会报错的。
于是进一步优化为:
当然,还是会存在问题:没有new成功的话,不仅开空间失败,还破坏了A。
(new失败可以通过抛异常检查)
于是我们进一步修改:(引入char* tmp)
3. iterator迭代器的实现
(vs下的迭代器并不是以指针的形式实现的)
(范围for的本质也是迭代器,是“傻瓜式”的替代)
const_iterator:const迭代器是可以修改的,是它指向的内容不可以被修改。
4.string的比较
比较的是ASCII码的大小。
在写代码时,注意复用!
例:
这里有一个小小的需要注意的地方:
流插入的优先次序更高,所以括号不能少!
例:
5.reserve模拟实现
6.push_back和append的模拟实现
7.resize的模拟实现
8.insert的模拟实现
单个字符:
字符串:
9.erase的模拟实现
10.swap的模拟实现
11.find的模拟实现
找某个字符:
找字符串:(复用strstr)
12.ostream模拟实现