您的位置:首页 > 运维架构 > Linux

LinuxC/C++编程基础(4) 基于泛型实现vector

2012-11-21 18:05 691 查看
一.vector泛型类的定义,如下:

#ifndef VECTOR_H_

#define VECTOR_H_

#include <stdio.h>

template<class Object>

class Vector {

public:

explicit Vector(int initsize = 0) :

theSize(initsize), theCapacity(initsize + SPACE_CAPACITY) {

datas = new Object[theCapacity];

}

Vector(const Vector & rhs) :

datas(NULL) {

operator=(rhs);

}

~Vector() {

delete[] datas;

}

const Vector & operator=(const Vector& rhs) {

if (&rhs != this) {

delete[] datas;

theSize = rhs.size();

theCapacity = rhs.capacity();

datas = new Object[theCapacity];

for (int k = 0; k < theSize; ++k)

datas[k] = rhs.datas[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* olddatas = datas;

datas = new Object[newCapacity];

for (int k = 0; k < theSize; ++k)

datas[k] = olddatas[k];

theCapacity = newCapacity;

delete[] olddatas;

}

Object& operator[](int index) {

return datas[index];

}

const Object& operator[](int index) const {

return datas[index];

}

bool empty() const {

return theSize == 0;

}

int size() const {

return theSize;

}

int capacity() const {

return theCapacity;

}

void push_back(const Object & x) {

if (theSize == theCapacity)

reserve(2 * theCapacity + 1);

datas[theSize++] = x;

}

void pop_back() {

theSize--;

}

const Object& front() const{//返回第一个元素的引用

return datas[0];

}

const Object& back() const {

return datas[theSize - 1];

}

typedef Object* iterator;

typedef const Object* const_iterator;

iterator begin() {

return &datas[0];

}

const_iterator begin() const {

return &datas[0];

}

iterator end() {

return &datas[size()];

}

const_iterator end() const {//end()函数返回的是vector末端的下一个位置,必须注意

return &datas[size()];

}

enum {

SPACE_CAPACITY = 16

};

private:

int theSize;

int theCapacity;

Object * datas;

};

#endif /* VECTOR_H_ */

二.main.cpp函数的实现,如下:

#include "Vector.h"

int main(int argc, char* argv[])

{

Vector<int> vec;

Vector<int>::iterator it;

for(int j=0;j<5;++j){

vec.push_back(j);

}

for(it=vec.begin();it != vec.end();++it){

cout<<*it<<endl;

}

return 0;

}

未完待续~

参考文献:http://blog.csdn.net/luxiaoxun/article/details/7433373

转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/8209099
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: