Vector的实现
来源:互联网 发布:竞彩分析软件 绿色 编辑:程序博客网 时间:2024/05/18 06:33
本文模仿STL中的vector,自己实现其基本功能,主要包括:
- 初始化列表形式的初始化 eg.
vector<int> v{1,2,3,4,5};
- 构造函数与析构函数,包括赋值构造、移动构造
- 拷贝函数,包括赋值拷贝、移动拷贝
- 基础API函数:
- resize( ), reserve( ), size( ), empty( )
- push_back( ), pop_back( ), begin( ), end( )
- operator 等等
注意,模板类不建议使用分离编译,感觉C++的模板就是个坑。
下面直接贴代码:
#ifndef VECTOR_H#define VECTOR_H#include <algorithm>#include <initializer_list>template <typename Object>class Vector{public: Vector( std::initializer_list <Object> l) : theSize(l.size()) //初始化列表 { objects = new Object[l.size()+SPARE_CAPACITY]; auto it = l.begin(); int k=0; for( ; it!=l.end(); ++it,++k) objects[k] = *it; } explicit Vector( int initSize = 0 ): theSize(initSize), //禁止自动转换 theCapacity{initSize+SPARE_CAPACITY} { objects = new Object[theCapacity]; } Vector(const Vector& rhs): theSize(rhs.theSize), theCapacity(rhs.theCapacity), objects(nullptr){ objects = new Object[theCapacity]; for(int k=0; k<theSize; ++k) objects[k] = rhs.objects[k]; } Vector& operator = (const Vector & rhs) { Vector copy = rhs; std::swap(*this, copy); return *this; } Vector(Vector && rhs) : theSize(rhs.theSize), theCapacity(rhs.theCapacity), objects(rhs.objects) { rhs.objects = nullptr; rhs.theSize = 0; rhs.theCapacity = 0; } Vector & operator = (Vector &&rhs) { std::swap(theSize, rhs.theSize); std::swap(theCapacity, rhs.theCapacity); std::swap(objects, rhs.objects); return *this; } ~Vector() { delete []objects; } void resize( int newSize) { if(newSize > theCapacity) reserve( newSize*2 ); theSize = newSize; } void reserve( int newCapacity) { if( newCapacity < theSize) return; Object *newArray = new Object[newCapacity]; for(int k=0; k<theSize; ++k) newArray[k] = std::move(objects[k]); theCapacity = newCapacity; std::swap(objects, newArray); delete []newArray; } 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 push_back(Object && x) { if(theSize == theCapacity) reserve(2*theCapacity+1); objects[theSize++] = std::move(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()]; } static const int SPARE_CAPACITY = 16;private: int theSize; int theCapacity; Object * objects;};#endif // VECTOR_H
main.cpp:
#include <iostream># include "vector.h"using namespace std;int main(int argc, char *argv[]){ Vector<int> v{1,2,3}; //for(int i=0;i<5;++i) v.push_back(i); for(auto i:v) cout<<i<<" "; //cout << "Hello World!" << endl; return 0;}
阅读全文
0 0
- vector的实现
- vector的实现
- Vector的C++实现
- 我的vector实现
- 向量vector的实现
- vector类的实现
- 简单vector 的实现
- vector的内部实现
- Vector的简单实现
- 向量Vector的实现
- vector容器的实现
- 简单的vector实现
- Vector类的实现
- 向量vector的实现
- vector方法的实现
- vector的简单实现
- STL-vector的实现
- template vector 的实现
- I am from shanghai 的倒序
- 关于左右连接
- 位运算相关高频面试题
- 双链表的简单实现
- 链表--合并两个有序链表,合并以后的链表依旧有序。
- Vector的实现
- Decorator
- 栈与队列(3)
- Groovy的闭包
- ImportError: The _imagingft C module is not installed
- JQuery随笔7.16
- Windows 平台下解决httpd.exe: syntax error on line 39
- UVA Live 6474 Drop Zone 最小割=最大流
- windows+Ubuntu双系统引导修复(终极版)