09.20 C++对C的扩充以及C++中的封装、SeqList

news/2024/9/21 1:36:48 标签: c++, c语言, 开发语言

在这里插入图片描述
在这里插入图片描述

SeqList.h

#ifndef SEQLIST_H
#define SEQLIST_H

#include <iostream>
#include<memory.h>
#include<stdlib.h>
#include<string.h>


using namespace std;

//typedef int datatype;        //类型重命名
using datatype = int;

//封装一个顺序表
class SeqList
{
private:
    datatype *ptr;        //指向堆区空间的起始地址
    int size;             //总长度
    int len = 0;          //当前顺序表实际长度


public:
    void init(int n);

    //判空
    bool empty();
    //判满
    bool full();
    //尾插
    void push_back(datatype e);
    //任意位置插入
    void insert(int index);
    //任意位置删除
    void erase(int index);
    //定义展示函数
    void show();
    //求长度
    int get_size();
    //排序
    void sort(bool flag);
    //任意位置数据
    datatype& at(int index);
    //尾删
    void pop_back();

};

#endif // SEQLIST_H

SeqList.cpp

#include "SeqList.h"

void SeqList::init(int n)
{
    //在堆区申请出一个长度为n的空间,将其实地址赋值给ptr
    this->ptr = new datatype[n];


    //给len进行初始化
    this->len = 0;
    this->size = n;
}

//判空
bool SeqList::empty()
{
    return this->len == 0;
}

//判满
bool SeqList::full()
{
    return this->len == this->size;
}

//尾插
void SeqList::push_back(datatype e)
{
    //判断是否满了
    if(this->full())
    {
        return ;
    }

    this->ptr[len++] = e;

}

//任意位置插入
void SeqList::insert(int index){
    //判满
    if(this->full()){
        cout<<"列表满"<<endl;
        return;
    }

    if(index>size){
        cout<<"超出容器大小"<<endl;
        return;
    }
    if(index<0){
        cout<<"位置不合法"<<endl;
        return;
    }
    int in;
    cout<<"请输入要插入的内容:"<<endl;
    cin>>in;

    for(int i=len;i>=index;i--){
        ptr[i] = ptr[i-1];
        cout<<ptr[i]<<endl;
    }
    ptr[index-1]=in;
    len++;
}

//任意位置删除
void SeqList::erase(int index){
    if(index>size){
        cout<<"超出容器大小"<<endl;
        return;
    }
    if(index<0){
        cout<<"位置不合法"<<endl;
        return;
    }
    if(empty()){
        cout<<"表为空"<<endl;
        return;
    }
    for(int i=index-1;i<len-1;i++){
        ptr[i]=ptr[i+1];
    }
    len--;

}

//定义展示函数
void SeqList::show()
{
    //判空
    if(empty()){
        cout<<"表为空"<<endl;
        return;
    }

    cout<<"当前顺序表中的元素分别是:";
    for(int i=0; i<this->len; i++)
    {
        cout<<this->ptr[i]<<" ";
    }
    cout<<endl;
}
//求总长
int SeqList::get_size(){
    return this->len;
}

//获取任意位置的元素
datatype& SeqList::at(int index){
    return ptr[index-1];
}

// 排序函数
void SeqList::sort(bool flag){
    for (int i=0; i<len-1;i++) {
        for (int j=0; j<len-1-i;j++) {
            if ((flag&&ptr[j]>ptr[j+1])||(!flag&&ptr[j]<ptr[j+1])) {
                // 交换元素
                datatype temp=ptr[j];
                ptr[j]=ptr[j+1];
                ptr[j+1]=temp;
            }
        }
    }
}

//尾删
void SeqList::pop_back(){
    if(empty()){
        cout<<"列表为空"<<endl;
        return;
    }
    len--;
}

mian.cpp

#include "SeqList.h"

using namespace std;

int main()
{

    SeqList sl;           //实例化一个顺序表对象
        sl.init(5);            //申请空间
        sl.push_back(1111);
        sl.push_back(2222);
        sl.push_back(3333);
        //sl.insert(1);
        //sl.erase(2);
        //cout<<sl.at(2)<<endl;
        sl.sort(0);
        sl.show();

    return 0;
}

http://www.niftyadmin.cn/n/5667966.html

相关文章

react的事件绑定

文章目录 基本示例使用箭头函数事件对象阻止默认行为绑定事件处理函数的上下文 在 React 中&#xff0c;事件绑定主要通过 JSX 属性来实现。事件处理函数被传递给相应的事件属性&#xff0c;例如 onClick、onChange 等。这些属性会被绑定到 HTML 元素上&#xff0c;并在事件发生…

Broadcast:Android中实现组件及进程间通信

目录 一&#xff0c;Broadcast和BroadcastReceiver 1&#xff0c;简介 2&#xff0c;广播使用 二&#xff0c;静态注册和动态注册 三&#xff0c;无序广播和有序广播 1&#xff0c;有序广播的使用 2&#xff0c;有序广播的截断 3&#xff0c;有序广播的信息传递 四&am…

搜维尔科技:工程师已经解决OptiTrack捕捉过程中肘部不自然的弯曲

工程师已经解决OptiTrack捕捉过程中肘部不自然的弯曲 搜维尔科技&#xff1a;工程师已经解决OptiTrack捕捉过程中肘部不自然的弯曲

Windows环境下搭建MySQL主从同步实现读写分离

文章目录 前言读写分离的基本原理 环境介绍及说明主库my.ini初始配置创建用于同步的数据库和表 一、新增mysql从库1.复制mysql文件夹2.修改从库的my.ini3.安装到windows服务 二、在my.ini中配置主、从库相关参数1.主库新增配置参数不同版本参数不同问题 2.从库新增配置参数3.删…

视频单目标跟踪研究

由于对视频单目标跟踪并不是很熟悉&#xff0c;所以首先得对该领域有个大致的了解。 视频目标跟踪是计算机视觉领域重要的基础性研究问题之一&#xff0c;是指在视频序列第一帧指定目标 后&#xff0c;在后续帧持续跟踪目标&#xff0c;即利用边界框&#xff08;通常用矩形框表…

卷积神经网络经典模型架构简介

【图书推荐】《PyTorch深度学习与企业级项目实战》-CSDN博客 《PyTorch深度学习与企业级项目实战&#xff08;人工智能技术丛书&#xff09;》(宋立桓&#xff0c;宋立林)【摘要 书评 试读】- 京东图书 (jd.com) ImageNet是一个包含超过1 500万幅手工标记的高分辨率图像的数据…

MySQL索引知识个人笔记总结(持续整理)

本篇笔记是个人整理的索引知识总结&#xff0c;刚开始有点乱&#xff0c;后续会一直边学边整理边总结 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。就好比索引就是数据的目录 索引结构 Btree索引,Hash索引,Full-text索引&#xff0c;R-tree(空…

2、无线通信的主要特点

无线通信针对有线通信静态的缺点&#xff0c;以开放式来传递消息&#xff0c;打破了一定要有全封闭链路的限制&#xff0c;并将通信方式从静态推广到可移动的准动态。其代价是牺牲了全封闭的优质人造通道&#xff0c;来换取无须采用固定介质专用线路的开放式传输的灵活性&#…