C++怎么实现动态顺序表
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本篇内容主要讲解"C++怎么实现动态顺序表",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++怎么实现动态顺序表"吧!Vector.h#pragma on
千家信息网最后更新 2026年11月04日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安全错误
数据库的锁怎样保障安全
小米移动互联网科技园
新华互联网科技
中国互联网科技工作委员会毛军
互联网科技开发公司
互联网的科技创新
互联网科技金融公司
互联网科技小贷
互联网 科技创业
碳银互联网科技
九亚互联网科技
兼蜜互联网科技
齐家互联网科技有限公司
海南科技产业互联网平台
科技互联网的估值
团飞科技与伯堂互联网服务平台
智腾互联网科技有限公司
无锡工业互联网科技有限公司
中天科技中国工业互联网
重庆科技产业互联网有哪些
互联网的黑科技实验室
科技互联网
智能科技公司是互联网公司吗
朗新科技与工业互联网
互联网科技集团
中国互联网科技发展
顺玮阁互联网科技
成都狮子座互联网科技
银川新华互联网科技职业技术培训学校图片
互联网科技的全部知识
河南商务圈互联网科技有限公司