温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++怎么实现动态顺序表

发布时间:2022-02-23 13:37:42 来源:亿速云 阅读:169 作者:iii 栏目:开发技术

本篇内容主要讲解“C++怎么实现动态顺序表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么实现动态顺序表”吧!

Vector.h

#pragma once  #include <stdio.h> #include <iostream> #include <assert.h> #include <string.h> using 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 << endl;   }   size_t Size() const;   size_t Capacity() const;   void Expand(size_t n);   void PushBack(DataType x);   void Reserve(size_t n);   void PopBack();   void Insert(size_t pos, DataType x);   void Erase(size_t pos);   size_t Find(DataType x); private:   DataType* _first;   DataType* _finish;   DataType* _endofstorage; }; size_t Vector::Size() const {   return _finish - _first; } size_t Vector::Capacity() const {   return _endofstorage - _first; } void Vector::Expand(size_t n) {   if (n > 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 <= Size());   if (_finish == _endofstorage)   {     if (Capacity() == 0)     {       Expand(3);     }     else     {       Expand(Capacity() * 2);     }   }   int end = Size() - 1;   while (end >= (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; }

到此,相信大家对“C++怎么实现动态顺序表”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI