博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vector的简单实现
阅读量:3590 次
发布时间:2019-05-20

本文共 2383 字,大约阅读时间需要 7 分钟。

借鉴《数据结构和算法分析c++描述》中:

template 
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 &和 引用)

转载地址:http://xsown.baihongyu.com/

你可能感兴趣的文章
Chrome正在受到自动软件的控制 解决办法
查看>>
selenium定位的使用
查看>>
selenium定位的实例
查看>>
html文档为uincode编码的解码问题
查看>>
urllib.request.urlretrieve
查看>>
python文本相似度分析tf-idf
查看>>
sklearn无监督学习-聚类k-means
查看>>
树莓派中文输入法
查看>>
sklearn-降维-(主成分分析)PCA
查看>>
sklearn-降维-非负矩阵分解(NMF)
查看>>
windows局域网、校园网连接树莓派
查看>>
Django的URL路由
查看>>
django的视图响应类型
查看>>
Django的模板引擎与模板使用
查看>>
liunx安装chrome浏览器
查看>>
tensorflow矩阵的运算
查看>>
tensorflow更新变量
查看>>
sublime 显示文件编码
查看>>
filter,map,reduce
查看>>
sublime text3打开浏览器
查看>>