1.vector类的实现
重要结构定义:
template<class T>
class myVector{
public:
typedef T value_type;//元素类型 起别名
typedef value_type* pointer;//
typedef value_type* iterator;//迭代器
typedef value_type& reference;//引用
typedef const value_type* const_pointer;//常量指针
typedef const value_type& const_reference;//常量引用
typedef size_t size_type;//数据类型基本尺寸大小
private:
iterator start;
iterator finish;
iterator end_of_storage;
供类内部以及派生类使用:
protected:
//分配空间并填充初始值, 不返回任何值
void __allocate_add_fill(size_type n, const T& value){
iterator result = (iterator)malloc(n*sizeof(T));
if (result){//result!=0 申请内存成功,在得到的内存上创建对象
start = result;
end_of_storage = start + n;
finish = end_of_storage;
while (n--){
//指针偏移,进行赋值
construct(result, value);//在内存上,一个个的进行构造对象
++result;
}
}
else{
cout << "内存不足,程序终止!" << endl;
exit(0);
}
}
//分配空间 从first开始复制n个值到新空间中, 并返回新开辟的空间的首地址
iterator __allocate_and_copy(iterator first, size_type n){
//内存申请
iterator result = (iterator)malloc(n*sizeof(T));
iterator _start = result;
if (0 != result){
while(n--){
construct(result, *first);
++result;
++first;
}
cout << endl;
}
else{
cout << "内存不足,程序终止!" << endl;
exit(0);
}
return _start;
}
//将first到last迭代器之间(first,last)的元素拷贝到_start开始的内存中, 并返回 指向 拷贝完所有数据之后最后一个数据的下一个位置的指针
iterator __copy(iterator first, iterator last, iterator _start){
while (first < last){
*_start++ = *first++;
}
return _start;
}
//将first到last迭代器之间(first,last)的元素重新赋值
iterator __fill(iterator first, iterator last, const T& value){
while (first < last){
*first++ = value;
}
return first;
}
//自己写的 从迭代器first开始填充n个值为value的元素
iterator __fill_n(iterator first, size_type n, const T& value){
while (n--){
*first++ = value;
}
return first;
}
//自己写的 将从 [first,last)所有元素 一一依次后移, 最后的一个元素移到end的位置
void __backCopy