#ifndef _VECTOR_HPP_ #define _VECTOR_HPP_ #include template class Vector { private: T *_v; int _len; int _used; bool _sorted = false; void expand(); void shrink(); void adjust(); public: Vector(int len) { _used = 0; _len = len; _v = new int[_len]; } Vector() { _used = 0; _len = 10; _v = new int[_len]; } T get(int a){return _v[a];} T operator[](int i){return _v[i];} //排序搜索,返回秩 int search(T value); void put(int a, int value); void swap(int a, int b); int insert(int locate, int value); int remove(int locate, int value); int remove_sorted(int value); int find(int value); void bubbleSort(); void printall(); int getlen(); int getused(); int count(int value); void mergeSort(int lo, int hi); private: void merge(int lo, int mi, int hi); }; template void Vector::expand() { _len = _len * 2; T *p = new T[_len]; for (int i = 0; i <= _used; i++) p[i] = _v[i]; delete[] _v; _v = p; } template void Vector::shrink() { _len = _len >> 1; T *p = new T[_len]; for (int i = 0; i <= _used; i++) p[i] = _v[i]; delete[] _v; _v = p; } template void Vector::adjust() { if (((double)_used / (double)_len) < 0.25) shrink(); else if (((double)_used / (double)_len) > 0.75) expand(); return; } template int Vector::search(T e) { if (_sorted == false) return -1; int i = 0; for (; i <= _used && _v[i] <= e; i++) ; return i - 1; } #endif