C++怎么实现动态顺序表
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容主要讲解"C++怎么实现动态顺序表",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++怎么实现动态顺序表"吧!Vector.h#pragma on
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
三级等保数据库安全要求
阳江app软件开发前十
交通银行软件开发岗位笔试什么
电信核心网络技术支撑 认证
基于散列的内存数据库
互联网之光博览会天玑科技
山西企业软件开发收费
网络安全迎查报告
笔记本可以当服务器吗
csgo更新后怎么没有服务器
网络安全检查情况描述
湖北猪兼强互联网科技
数据库学生选课信息需求分析
360国家网络安全建设
服务器至强系列
网络安全法规定窃取
王牌竞速帐号服务器查询
为什么我重启阿里云服务器后
青岛超立方网络技术有限公司
计算机网络安全密码学题库
三级等保数据库安全要求
同花顺服务器异常怎么办
如何修改云服务器主机名
临沂平台软件开发推荐
上海数据库sql
光遇服务器未响应怎么解释
网络安全检查情况描述
sqlist数据库安装教程
网络技术的职业目标规划
服务器怎么查看u盘盘符