C++对C的函数部分的扩充

封装

#include <iostream>
#include <memory.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
using datatype = int;
//封装一个顺序表
class SeqList 
{
private:
    datatype* ptr;        //指向堆区空间的起始地址
    int size;             //总长度
    int len = 0;          //当前顺序表实际长度
public:
    void init(int n) 
    {
        //在堆区申请出一个长度为 n 的空间,将其实地址赋值给 ptr
        this->ptr = new datatype[n];
        //给 len 进行初始化
        this->len = 0;
        this->size = n;
    }
    //判空
    bool empty() 
    {
        return this->len == 0;
    }
    //判满
    bool full() 
    {
        return this->len == this->size;
    }
    //尾插
    void push_back(datatype e) 
    {
        //判断是否满了
        if (this->full()) 
        {
            return;
        }
        this->ptr[len++] = e;
    }
    //插入
    void insert(int index, datatype e) 
    {
        if (index < 0 || index > len) return;
        if (full()) return;
        for (int i = len; i > index; i--) 
        {
            ptr[i] = ptr[i - 1];
        }
        ptr[index] = e;
        len++;
    }
    //任意位置删除
    void erase(int index)
    {
        if (index < 0 || index >= len) return;
        for (int i = index; i < len - 1; i++) 
        {
            ptr[i] = ptr[i + 1];
        }
        len--;
    }
    //尾删
    void pop_back() 
    {
        if (empty()) return;
        len--;
    }
    //求长度
    int length() {
        return len;
    }
    //获取任意位置元素
    datatype at(int index) 
    {
        if (index < 0 || index >= len) 
        {
            // 返回一个特定值表示错误
            return -1;
        }
        return ptr[index];
    }
    //将顺序表进行排序
    void sort(bool flag) 
    {
        for (int i = 0; i < len - 1; i++) 
        {
            for (int j = 0; j < len - i - 1; 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 show() 
    {
        //判空
        cout << "当前顺序表中的元素分别是:";
        for (int i = 0; i < this->len; i++) 
        {
            cout << this->ptr[i] << " ";
        }
        cout << endl;
    }
};
int main() 
{
    SeqList sl;           //实例化一个顺序表对象
    sl.init(5);            //申请空间
    sl.push_back(1);
    sl.push_back(3);
    sl.push_back(5);
    sl.show();
    sl.insert(1, 2);
    sl.show();
    sl.erase(2);
    sl.show();
    sl.pop_back();
    sl.show();
    cout << "顺序表长度为:" << sl.length() << endl;
    int elementAtIndex = sl.at(1);
    if (elementAtIndex!= -1) 
    {
        cout<< elementAtIndex << endl;
    } 
    else 
    {
        cout << "错误" << endl;
    }
    sl.sort(true);
    sl.show();
    sl.sort(false);
    sl.show();
    return 0;
}





![[漏洞复现]泛微e-mobile cdnfile文件读取漏洞分析复现](https://i-blog.csdnimg.cn/direct/7266ee7d68584fce91140b7d4855c1fb.png)












