歡迎您光臨本站 註冊首頁

C++實現動態順序表

←手機掃碼閱讀     zmcjlove @ 2020-06-05 , reply:0

本文實例為大家分享了C++實現動態順序表的具體代碼,供大家參考,具體內容如下

Vector.h

 #pragma once #include#include#include#includeusing namespace std; typedef int DataType; class Vector { public: Vector() :_first(NULL) , _finish(NULL) , _endofstorage(NULL) {} Vector(const Vector& v) { if (v.Size() > 0) { _first = new DataType[v.Size()]; //只開闢原有數據所佔空間大小,節省空間 memcpy(_first, v._first, sizeof(DataType)*v.Size()); if (_first) { _finish = _first + v.Size(); _endofstorage = _first + v.Size(); } else { _first = _finish = _endofstorage = NULL; } } } Vector& operator=(Vector& v) { if (this != &v) { ////傳統寫法 //DataType* tmp = new DataType[v.Size()]; //memcpy(tmp, _first, sizeof(DataType)*v.Size()); //delete[] _first; //_first = tmp; //_finish = _first + v.Size(); //_endofstorage = _first + v.Size(); //現代寫法 swap(_first, v._first); swap(_finish, v._finish); swap(_endofstorage, v._endofstorage); } return *this; } ~Vector() { delete[] _first; _first = _finish = _endofstorage = NULL; } void Print() { DataType* cur = _first; while (cur != _finish) { cout <<*cur <<" "; ++cur; } cout <Capacity()) { size_t size = Size(); DataType* tmp = new DataType[n]; memcpy(tmp, _first, sizeof(DataType)*size); delete[] _first; _first = tmp; _finish = _first + size; //切記更新新的_finish和_endofstorage _endofstorage = _first + n; } } void Vector::PushBack(DataType x) { //if (_finish == _endofstorage) //{ // if (Capacity() == 0) // { // Expand(3); // } // else // { // Expand(Capacity() * 2); // } //} //*_finish = x; //++_finish; Insert(Size(), x); } void Vector::Reserve(size_t n) { if (n > Capacity()) { Expand(n); } } void Vector::PopBack() { assert(_finish > _first); --_finish; } void Vector::Insert(size_t pos, DataType x) { assert(pos = (int)pos) { _first[end + 1] = _first[end]; --end; } _first[pos] = x; ++_finish; } void Vector::Erase(size_t pos) { assert(pos<Size()); size_t cur = pos; while (cur <Size() - 1) { _first[cur] = _first[cur + 1]; ++cur; } --_finish; } size_t Vector::Find(DataType x) { DataType* cur = _first; while (cur != _finish) { if (*cur == x) { return cur - _first; } ++cur; } return -1; } void TestVector() { Vector v1; v1.PushBack(1); v1.PushBack(2); v1.PushBack(3); v1.PushBack(4); v1.Print(); size_t pos = v1.Find(2); printf("pos expect 1,actual %lu ", pos); Vector v2(v1); v2.Insert(0, 0); v2.Print(); Vector v3; v3 = v2; v3.Print(); v3.Erase(1); v3.Print(); }

test.cpp

 #include "Vector.h" int main() { cout <<"順序表:" <<endl; TestVector(); return 0; }

效果:



[zmcjlove ] C++實現動態順序表已經有271次圍觀

http://coctec.com/docs/c/language/show-post-237020.html