一.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