自定义vector

来源:互联网 发布:徐州淘宝产业链 编辑:程序博客网 时间:2024/06/05 20:06

自定义vector

#include <cstdlib>#include <ctime>#include <iostream>using namespace std;#define MAX_SIZE 1024template <class T>class vector{int m_nSize;int m_nCapacity;T *m_pVector;void __quicksort(int, int);public:vector();~vector();vector(int);vector(int, T);vector(const vector &);void reserve(int);void resize(int);void resize(int, T);void pop_back();void sort();void swap(vector &);T& front() const;T& back() const;int max_size() const;int size() const;int capacity() const;void push_back(const T);bool empty() const;bool operator == (const vector&) const;T& operator[] (int) const;};template <class T>vector<T>::vector(){m_nSize = 0;m_nCapacity = 0;m_pVector = NULL;}template <class T>vector<T>::~vector(){m_nSize = 0;m_nCapacity = 0;if(m_nCapacity)delete[] m_pVector;}template <class T>vector<T>::vector(int nCapacity){if(nCapacity > MAX_SIZE){cout << "内存超过最大限度!" << endl;exit(0);}m_nSize = 0;m_nCapacity = nCapacity;m_pVector = new T[m_nCapacity];}template <class T>vector<T>::vector(int nSize, T data){if(nSize > MAX_SIZE){cout << "内存超过最大限度!" << endl;exit(0);}m_nSize = nSize;m_nCapacity = nSize;m_pVector = new T[nSize];for(int i = 0; i < nSize; ++i)m_pVector[i] = data;}template <class T>vector<T>::vector(const vector &vec_src){this->m_nSize = vec_src.m_nSize;this->m_nCapacity = vec_src.m_nCapacity;this->m_pVector = new T[m_nCapacity];memcpy(this->m_pVector, vec_src.m_pVector, m_nSize * sizeof(T));}template <class T>bool vector<T>::empty() const{return m_nSize == 0;}template <class T>T& vector<T>::operator[](int index) const{if(index >= m_nSize){cout << "数组越界!" << endl;exit(0);}return m_pVector[index];}template <class T>void vector<T>::push_back(const T data) {if(m_nSize < m_nCapacity){m_pVector[m_nSize++] = data;}else{if(m_nSize >= MAX_SIZE){cout << "内存超过最大限度!" << endl;exit(0);}T *p = new T[m_nSize];memcpy(p, m_pVector, (m_nSize) * sizeof(T));delete[] m_pVector;m_pVector = new T[m_nSize + 1];memcpy(m_pVector, p, (m_nSize) * sizeof(T));m_pVector[m_nSize] = data;++m_nSize;++m_nCapacity;delete[] p;}}template <class T>void vector<T>::__quicksort(int left, int right){int i = left, j = right;int index = i + rand() % (j - i + 1);T key = m_pVector[index];while(i <= j){while(key > m_pVector[i])++i;while(m_pVector[j] > key)--j;if(i <= j){T temp = m_pVector[i];m_pVector[i] = m_pVector[j];m_pVector[j] = temp;++i, --j;}}if(i < right)__quicksort(i, right);if(left < j)__quicksort(left, j);}template <class T>void vector<T>::sort(){if(m_nSize > 0){srand((unsigned)time(NULL));__quicksort(0, m_nSize - 1);}}template <class T>int vector<T>::max_size() const{return MAX_SIZE;}template <class T>int vector<T>::size() const{return m_nSize;}template <class T>int vector<T>::capacity() const{return m_nCapacity;}template <class T>void vector<T>::reserve(int nSize){if(nSize > MAX_SIZE){cout << "内存超过最大限度!" << endl;exit(0);}m_nSize = 0;m_nCapacity = nSize;m_pVector = new T[nSize];}template <class T>T& vector<T>::front() const{return m_pVector[0];}template <class T>T& vector<T>::back() const{return m_pVector[m_nSize - 1];}template <class T>void vector<T>::pop_back(){if(m_nSize)--m_nSize;}template <class T>void vector<T>::resize(int nSize){if(nSize > MAX_SIZE){cout << "内存超过最大限度!" << endl;exit(0);}if(nSize > m_nCapacity){T *p = new T[m_nSize];memcpy(p, m_pVector, m_nSize * sizeof(T));delete[] m_pVector;m_pVector = new T[nSize];memcpy(m_pVector, p, m_nSize * sizeof(T));delete[] p;m_nCapacity = nSize;}else if(nSize < m_nSize){m_nSize = nSize;}}template <class T>void vector<T>::resize(int nSize, T data){resize(nSize);if(nSize > m_nSize){m_pVector[m_nSize++] = data;}}template <class T>bool vector<T>::operator == (const vector&src) const{int i;if(m_nSize != src.m_nSize)return false;for(i = 0; i < m_nSize; ++i)if(m_pVector[i] != src.m_pVector[i])return false;return true;}template <class T>void vector<T>::swap(vector &src){int max = m_nSize > src.m_nSize ? m_nSize : src.m_nSize;T *p = new T[max];resize(max);src.resize(max);memcpy(p, m_pVector, m_nSize * sizeof(T));memcpy(m_pVector, src.m_pVector, src.m_nSize * sizeof(T));memcpy(src.m_pVector, p, m_nSize * sizeof(T));delete[] p;max = m_nSize;m_nSize = src.m_nSize;src.m_nSize = max;}


0 0
原创粉丝点击