Vector的简单实现
来源:互联网 发布:linux sleep delay 编辑:程序博客网 时间:2024/06/18 17:49
借鉴《数据结构和算法分析c++描述》中:
template <typename Object>class Vector{ public: explicit Vector( int initSize = 0 ) : theSize( initSize ), theCapacity( initSize + SPARE_CAPACITY ) { objects = new Object[ theCapacity ]; } Vector( const Vector & rhs ) : objects( NULL ) { operator=( rhs ); } ~Vector( ) { delete [ ] objects; } const Vector & operator= ( const Vector & rhs ) { if( this != &rhs ) { delete [ ] objects; theSize = rhs.size( ); theCapacity = rhs.theCapacity; objects = new Object[ capacity( ) ]; for( int k = 0; k < size( ); k++ ) objects[ k ] = rhs.objects[ k ]; } return *this; } void resize( int newSize ) { if( newSize > theCapacity ) reserve( newSize * 2 + 1 ); theSize = newSize; } void reserve( int newCapacity ) { if( newCapacity < theSize ) return; Object *oldArray = objects; objects = new Object[ newCapacity ]; for( int k = 0; k < theSize; k++ ) objects[ k ] = oldArray[ k ]; theCapacity = newCapacity; delete [ ] oldArray; } Object & operator[]( int index ) { return objects[ index ]; } const Object & operator[]( int index ) const { return objects[ index ]; } bool empty( ) const { return size( ) == 0; } int size( ) const { return theSize; } int capacity( ) const { return theCapacity; } void push_back( const Object & x ) { if( theSize == theCapacity ) reserve( 2 * theCapacity + 1 ); objects[ theSize++ ] = x; } void pop_back( ) { theSize--; } const Object & back ( ) const { return objects[ theSize - 1 ]; } typedef Object * iterator; typedef const Object * const_iterator; iterator begin( ) { return &objects[ 0 ]; } const_iterator begin( ) const { return &objects[ 0 ]; } iterator end( ) { return &objects[ size( ) ]; } const_iterator end( ) const { return &objects[ size( ) ]; } enum { SPARE_CAPACITY = 16 }; private: int theSize; int theCapacity; Object * objects;};主要内容有:
1.为考虑容器数据类型多样性,采用模板形式 template <typename Object>
2.构造函数显式化,防止由构造函数定义的隐式变换,若去除explicit,那么 Vector v; v=2;将是合法的,但是我们禁止这种操作,只允许实现v=Vector(2);
3.重写复制构造函数、赋值运算符、通过下标访问和修改vector运算符(根据是否可以修改成员数据对象,分别定义为const &和 引用)
阅读全文
0 0
- 简单vector 的实现
- Vector的简单实现
- 简单的vector实现
- vector的简单实现
- vector的简单实现
- Vector的简单实现
- C++ vector 的简单实现
- c++ vector的简单实现
- fookwood的简单vector实现
- Vector的简单C++实现
- STL vector的简单实现
- vector的一种简单实现
- STL 简单 vector 的实现
- 一个简单的Vector实现
- 简单模拟vector的实现
- Vector容器的简单实现
- 自己实现的简单的Vector代码
- 自己实现vector的一些简单功能
- 15款不容错过的前端开发Javascript和css类库
- 职业生涯规划-程序员之路
- CentOS安装ZooKeeper
- phpcms 开发的一些总结
- Zookeeper的原理
- Vector的简单实现
- 面试题6. 重建二叉树
- 使用 /sys 文件系统访问 Linux 内核
- sap Adobeform的优势
- android开发错误集锦
- EF使用EntityTypeConfiguration配置映射关系
- TLD目标跟踪算法详解(三)学习器Learning (跟踪器与检测器的协调与更新)
- 神秘访客调研提升客户服务质量
- (五)java从零开始