数据结构-Vector
自定义Vector实现:
/////////////////////////////////////////////////////////////////////////////// // // FileName : c2_vector.h // Author : Jimmy Han // Date : N.A v1 // : 2014/07/13 09:30 v2 // /////////////////////////////////////////////////////////////////////////////// #include <cassert> template <class object> class Vector { public: explicit Vector(int initsize = 0) : _size(initsize), _capacity(initsize + SPARE_CAPACITY) {_object = new object[_capacity];} Vector(const Vector &rhs) : _object(NULL) { operator=(rhs);} ~Vector() {delete [] _object;} const Vector& operator=(const Vector &rhs) { if(this != &rhs) { delete [] _object; _size = rhs._size; _capacity = rhs._capacity; _object = new object[_capacity]; for(int k = 0; k < _size; k++) _object[k] = rhs._object[k]; } return *this; } void resize(int newSize) { if(newSize > _capacity) reserve(newSize * 2 + 1); _size = newSize; } void reserve(int newCapacity) { if(newCapacity < _size) return; object *oldobject = _object; _object = new object[newCapacity]; for (int n=0; n<_size; n++) _object[n] = oldobject[n]; delete [] oldobject; _capacity = newCapacity; } object& operator[](const int index) { assert(index >= 0 && index < _size); return _object[index]; } const object& operator[](const int index) const { assert(index >= 0 && index < _size); return _object[index]; } bool empty() const {return _size == 0;} int size() const {return _size;} int capacity() const {return _capacity;} void push_back(const object &x) { if(_size == _capacity) reserve(2*_capacity + 1); _object[_size++] = x; } void pop_back() {_size--;} const object& back() const { return _object[_size - 1];} typedef object* iterator ; typedef const object* const_iterator; iterator begin() {return &_object[0];} iterator end() {return &_object[_size];} const_iterator begin() const {return &_object[0];} const_iterator end() const {return &_object[_size];} enum{ SPARE_CAPACITY = 3}; private: int _size; int _capacity; object *_object; };
自定义Vector测试程序:
///////////////////////////////////////////////////////////////////////////////
//
// FileName : c2_vector.cpp
// Author : Jimmy Han
// Date : N.A v1
// : 2014/07/13 09:30 v2
// $ ./a.exe
// Calculate the size of self made Vector class
// sizeof(vint) is: 12
// Self made Vector size test:
// size of vint is: 5
// capacity of vint is: 7
// size of vint2 is: 8
// capacity of vint2 is: 17
// the last element of vint is: 4
// the 5 element of vint is: 4
// Self made iterator test:
// 0 1 2 3
// Iterator called by others:
// [0 1 2 3]
// [0 1 2 3 4 1919249516 1547322171 1735357008]
//
///////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include "printCollection.h"
#include "c2_vector.h"
using namespace std;
int main()
{
//default constructor
Vector<int> vint;
Vector<int> vint2;
//calc class size, two int, one pointer, so size is 12
cout << "Calculate the size of self made Vector class " << endl;
cout <<"sizeof(vint) is: " << sizeof(vint) << endl << endl;
//void push_back(const object &x)
for (int n=0; n<5; n++)
vint.push_back(n);
//const Vector& operator=(const Vector &rhs)
vint2 = vint;
//void resize( int newSize)
vint2.resize(8);
//int size(); int capacity();
cout << "Self made Vector size test: " << endl;
cout << "size of vint is: " << vint.size() << endl;
cout << "capacity of vint is: " << vint.capacity() << endl;
cout << "size of vint2 is: " << vint2.size() << endl;
cout << "capacity of vint2 is: " << vint2.capacity() << endl;
//const object& back();
cout << "the last element of vint is: " << vint.back() << endl;
//object& operator[](const int index)
cout << "the 5 element of vint is: " << vint[4] << endl << endl;
//void pop_back()
vint.pop_back();
//typedef object* iterator; typedef const ojbect* const_iterator
//iterator begin(); iterator end();
cout << "Self made iterator test: " << endl;
for (Vector<int>::iterator iter = vint.begin(); iter != vint.end(); iter++)
{
cout << *iter << " ";
}
cout << endl << endl;
cout << "Iterator called by others: " << endl;
printCollection(vint);
//after resize, not initilized member got random number
printCollection(vint2);
}
浙公网安备 33010602011771号