C++怎么实现动态顺序表
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,本篇内容主要讲解"C++怎么实现动态顺序表",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++怎么实现动态顺序表"吧!Vector.h#pragma on
千家信息网最后更新 2025年11月13日C++怎么实现动态顺序表
本篇内容主要讲解"C++怎么实现动态顺序表",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++怎么实现动态顺序表"吧!
Vector.h
#pragma once #include #include #include #include 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++怎么实现动态顺序表"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
顺序
动态
C++
内容
写法
空间
学习
实用
更深
传统
兴趣
大小
实用性
实际
操作简单
数据
方法
更多
朋友
网站
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器安全狗有密码怎么卸载
颐付网络技术有限公司招聘
如何获取数据库中默认的id
津小卫说网络安全教程
泰为网络技术有限公司
lg2011的服务器主板
南京软件开发培训机构哪家好
网络安全绘画作品一等奖成人
国内的数据库厂商
软件开发流程图技术点
石嘴山oa软件开发怎么样
pg数据库两日期相减
淘宝网络技术负责人
邯郸app软件开发商家
怎么比较数据库密码正确
谷歌服务器怎么卸载掉
深圳华美软件开发
网络安全主题日活动程序
幻塔综合服务器哪个区人多
安全漏洞数据库表格式
华三服务器修改时间命令
网络技术第一份工作做什么好
代理服务器搭建方法
无线网络技术带来的核心优势
软件开发公司财务做账
数据库技术发展的阶段过程
皇室战争服务器卡住进不去
html上传到服务器空间
陕西鑫盛互联网科技公司
国脉科技互联网医疗