C++提高笔记(四)---STL容器(stack、queue、list)

1、stack容器(栈)

1.1 栈stack基本概念

概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口

栈中只有顶端的元素才可以被外界调用,因此栈不允许有遍历行为(入栈--push、出栈---pop

1.2 栈stack常用接口

功能描述:栈容器常用的对外接口

构造函数:

stack<T> stk;            //stack采用模板类实现,stack对象的默认构造形式
stack(const stack& stk); //拷贝构造函数

赋值操作:

stack& operator=(const stack& stk);//重载等号操作符

数据存取:

push(elem); //向栈顶添加元素
pop();      //从栈顶移除第一个元素
top();      //返回栈顶元素

大小操作:

empty();//判断堆栈是否为空
size(); //返回栈的大小
#include <iostream>
using namespace std;
#include<stack>
//栈stack容器
void test01()
{//特点:符合先进后出数据结构stack<int>s;//入栈s.push(10);s.push(20);s.push(30);s.push(40);//只要栈不为空,查看栈顶,并且执行出栈操作while (!s.empty()){//查看栈顶元素cout << "栈顶元素为:" << s.top() << endl;//出栈s.pop();}cout << "栈的大小:" << s.size() << endl;
}int main()
{test01();system("pause");return 0;
}

输出结果:

栈顶元素为:40
栈顶元素为:30
栈顶元素为:20
栈顶元素为:10
栈的大小:0
请按任意键继续. . .

2、queue容器(栈)

2.1queue基本概念

概念:queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口

队列容器允许从一端新增元素,从另一端移除元素

队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为

队列中进数据称为入队---push

队列中出数据称为出队---pop

2.2queue常用接口

功能描述:栈容器常用的对外接口

构造函数:

queue<T> que;           //queue采用横板类实现,queue对象的默认构造形式
queue(const queue& que);//拷贝构造函数

赋值操作:

queue& operator=(const queue& que);//重载等号操作符

数据存取:

push(elem); //往队尾添加元素
pop();      //从队头移除第一个元素
back();     //返回最后一个元素
front();    //返回第一个元素

大小操作:

empty();//判断堆栈是否为空
size(); //返回栈的大小
#include <iostream>
using namespace std;
#include<queue>
#include<string>
//queue常用接口
//构造函数:
//queue<T> que;           //queue采用横板类实现,queue对象的默认构造形式
//queue(const queue& que);//拷贝构造函数
//赋值操作:
//queue& operator=(const queue& que);//重载等号操作符
//数据存取:
//push(elem); //往队尾添加元素
//pop();      //从队头移除第一个元素
//back();     //返回最后一个元素
//front();    //返回第一个元素
//大小操作:
//empty();//判断堆栈是否为空
//size(); //返回栈的大小
class Person
{
public:Person(string name,int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};
//queue队列
void test01()
{//创建队列queue<Person>q;//准备数据Person p1("唐僧",30);Person p2("孙悟空", 1000);Person p3("猪八戒", 900);Person p4("沙僧", 800);//入队q.push(p1);q.push(p2);q.push(p3);q.push(p4);cout << "队列大小为:" << q.size() << endl;//判断只要队列不为空,查看对头,查看队尾,出队while (!q.empty()){//查看对头cout << "查看队头---姓名:" << q.front().m_Name << " 年龄:" << q.front().m_Age << endl;//查看队尾cout << "查看队尾---姓名:" << q.back().m_Name << " 年龄:" << q.back().m_Age << endl;//出队q.pop();}cout << "队列大小为:" << q.size() << endl;
}int main()
{test01();system("pause");return 0;
}

输出结果:

队列大小为:4
查看队头---姓名:唐僧 年龄:30
查看队尾---姓名:沙僧 年龄:800
查看队头---姓名:孙悟空 年龄:1000
查看队尾---姓名:沙僧 年龄:800
查看队头---姓名:猪八戒 年龄:900
查看队尾---姓名:沙僧 年龄:800
查看队头---姓名:沙僧 年龄:800
查看队尾---姓名:沙僧 年龄:800
队列大小为:0
请按任意键继续. . .

3、list容器(链表)

3.1list基本概念

功能:将数据进行链式存储

链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的

链表的组成:链表由一系列结点组成

结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域

STL中的链表是一个双向循环链表(下图不够准确,第一个节点中prev的null应该指向最后一个节点的data,最后一个节点中next的null应该指向第一个节点的data)

由于链表的存储方式并不是连续的内存空间,因此链表lst中的迭代器只支持前移和后移,属于双向迭代器

list的优点:
        采用动态存储分配,不会造成内存浪费和溢出
        链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素

list的缺点:
        链表灵活,但是空间(指针域)和 时间(遍历)额外耗费较大

List有一个重要的性质,插入操作和删除操作都不会造成原有list选代器的失效,这在vector是不成立的。

总结:STL中List和vector是两个最常被使用的容器,各有优缺点

3.2 list构造函数

功能描述:创建list容器

函数原型:

list < T> 1st;          //list采用采用模板类实现,对象的默认构造形式:
list(beg, end);         //构造函数将[beg end)区间中的元素拷贝给本身
list(n, elem);          //构造函数将n个elem拷贝给本身
list(const list& lst);  //拷贝构造函数
#include <iostream>
using namespace std;
#include<list>
//list构造函数
//list < T> 1st;          //list采用采用模板类实现,对象的默认构造形式:
//list(beg, end);         //构造函数将[beg end)区间中的元素拷贝给本身
//list(n, elem);          //构造函数将n个elem拷贝给本身
//list(const list& lst);  //拷贝构造函数
void printList(const list<int>& L)
{for (list<int>::const_iterator it = L.begin(); it != L.end(); it++){cout << *it << " ";}cout << endl;
}void test01()
{//创建list容器list<int>L1;//默认构造//添加数据L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);//遍历容器printList(L1);//区间方式构造list<int>L2(L1.begin(), L1.end());printList(L2);//拷贝构造list<int>L3(L2);printList(L3);//n个elem构造list<int>L4(4, 66);printList(L4);
}int main()
{test01();system("pause");return 0;
}

输出结果:

10 20 30 40
10 20 30 40
10 20 30 40
66 66 66 66
请按任意键继续. . .

总结:list构造方式同其他几个STL常用容器相同,熟练掌握即可 

3.3 list赋值和交换

功能描述:给list容器进行赋值,以及交换list容器

函数原型:

assign(beg, end);               //将[beg, end)区间中的数据拷贝赋值给本身
assign(n, elem);                //将n个elem拷贝赋值给本身
list& operator=(const list& lst);//重载等号操作符
swap(lst);                      //将lst与本身的元素互换
#include <iostream>
using namespace std;
#include<list>
//list赋值和交换
//assign(beg, end);               //将[beg, end)区间中的数据拷贝赋值给本身
//assign(n, elem);                //将n个elem拷贝赋值给本身
//list& operator=(const list& lst);//重载等号操作符
//swap(lst);                      //将lst与本身的元素互换
void printList(const list<int>& L)
{for (list<int>::const_iterator it = L.begin(); it != L.end(); it++){cout << *it << " ";}cout << endl;
}
//赋值
void test01()
{//创建list容器list<int>L1;//默认构造//添加数据L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);//遍历容器printList(L1);//operator=赋值list<int>L2;L2 = L1;printList(L2);list<int>L3;L3.assign(L2.begin(), L2.end());printList(L3);list<int>L4;L4.assign(6, 100);printList(L4);
}
//交换
void test02()
{list<int>L1;L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);list<int>L2;L2.assign(6, 100);cout << "交换前:" << endl;printList(L1);printList(L2);cout << "交换后:" << endl;L1.swap(L2);printList(L1);printList(L2);
}
int main()
{test01();test02();system("pause");return 0;
}

输出结果:

10 20 30 40
10 20 30 40
10 20 30 40
100 100 100 100 100 100
交换前:
10 20 30 40
100 100 100 100 100 100
交换后:
100 100 100 100 100 100
10 20 30 40
请按任意键继续. . .

3.4 list大小操作

功能描述:对list容器的大小进行操作

函数原型:

size();           //返回容器中元素的个数
empty();          //判断容器是否为空
resize(num);      //重新指定容器的长度为num,若容器变长,则以默认值填充新位置//如果容器变短,则末尾超出容器长度的元素被删除
resize(num, elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置//如果容器变短,则末尾超出容器长度的元素被删除
#include <iostream>
using namespace std;
#include<list>
//list大小操作
//size();           //返回容器中元素的个数
//empty();          //判断容器是否为空
//resize(num);      //重新指定容器的长度为num,若容器变长,则以默认值填充新位置
//                  //如果容器变短,则末尾超出容器长度的元素被删除
//resize(num, elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置
//                  //如果容器变短,则末尾超出容器长度的元素被删除
void printList(const list<int>& L)
{for (list<int>::const_iterator it = L.begin(); it != L.end(); it++){cout << *it << " ";}cout << endl;
}
void test01()
{//创建list容器list<int>L1;//默认构造//添加数据L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);//遍历容器printList(L1);//判断容器是否为空if (L1.empty()){cout << "L1为空" << endl;}else{cout << "L1不为空" << endl;cout << "L1的元素个数为:" << L1.size() << endl;}//重新指定大小L1.resize(6, 999);printList(L1);L1.resize(2);printList(L1);
}int main()
{test01();system("pause");return 0;
}

输出结果:

10 20 30 40
L1不为空
L1的元素个数为:4
10 20 30 40 999 999
10 20
请按任意键继续. . .

3.5 list插入和删除

功能描述:对list容器进行数据的插入和删除

函数原型:

push_back(elem);     //在容器尾部加入一个元素
pop_back();          //删除容器中最后一个元素
push_front(elem);    //在容器开头插入一个元素
pop_front();         //从容器开头移除第一个元素
insert(pos,elem);    //在pos位置插elem元素的拷贝,返回新数据的位置
insert(pos,n,elem);  //在pos位置插入n个elem数据,无返回值
insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值
clear();             //移除容器的所有数据
erase(beg,end);      //删除[beg,end)区间的数据,返回下一个数据的位置
erase(pos);          //删除pos位置的数据,返回下一个数据的位置
remove(elem);        //删除容器中所有与elem值匹配的元素
#include <iostream>
using namespace std;
#include<list>
//list容器插入和删除
//push_back(elem);     //在容器尾部加入一个元素
//pop_back();          //删除容器中最后一个元素
//push_front(elem);    //在容器开头插入一个元素
//pop_front();         //从容器开头移除第一个元素
//insert(pos,elem);    //在pos位置插elem元素的拷贝,返回新数据的位置
//insert(pos,n,elem);  //在pos位置插入n个elem数据,无返回值
//insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值
//clear();             //移除容器的所有数据
//erase(beg,end);      //删除[beg,end)区间的数据,返回下一个数据的位置
//erase(pos);          //删除pos位置的数据,返回下一个数据的位置
//remove(elem);        //删除容器中所有与elem值匹配的元素
void printList(const list<int>& L)
{for (list<int>::const_iterator it = L.begin(); it != L.end(); it++){cout << *it << " ";}cout << endl;
}
void test01()
{//创建list容器list<int>L;//默认构造//尾插L.push_back(10);L.push_back(20);L.push_back(30);//头插L.push_front(100);L.push_front(200);L.push_front(300);//遍历容器300 200 100 10 20 30printList(L);//尾删L.pop_back();printList(L);//300 200 100 10 20//头删L.pop_front();printList(L);//200 100 10 20//insert插入list<int>::iterator it = L.begin();L.insert(++it, 999);//给特定位置插入相应数据printList(L);//200 999 10 20//删除it = L.begin();L.erase(it);//可以对it进行操作 删除特定位置数据printList(L);//999 10 20//移除L.push_back(10000);L.push_back(10000);L.push_back(10000);L.push_back(10000);L.push_back(10000);printList(L);L.remove(10000);//把10000全部删除printList(L);//清空L.clear();printList(L);
}int main()
{test01();system("pause");return 0;
}

输出结果:

300 200 100 10 20 30
300 200 100 10 20
200 100 10 20
200 999 100 10 20
999 100 10 20
999 100 10 20 10000 10000 10000 10000 10000
999 100 10 20请按任意键继续. . .

3.6 list数据存取

功能描述:对list容器中数据进行存取

函数原型:

front(); //返回第一个元素
back();  //返回最后一个元素
#include <iostream>
using namespace std;
#include<list>
//list容器数据存取
//front(); //返回第一个元素
//back();  //返回最后一个元素
void test01()
{//创建list容器list<int>L1;//默认构造//尾插L1.push_back(10);L1.push_back(20);L1.push_back(30);L1.push_back(40);//L1[0]    不可以用[]访问list容器中的元素//L1.at(0) 不可以用at方式访问list容器中的元素//原因是list本质是链表,不是用连续线性空间存储数据,迭代器也是不支持随机访问的cout << "第一个元素为:" << L1.front() << endl;cout << "最后一个元素为:" << L1.back() << endl;//验证迭代器是不支持随机访问的list<int>::iterator it = L1.begin();it++;//支持双向it--;//it = it + 1;//不支持随机访问
}int main()
{test01();system("pause");return 0;
}

输出结果:

第一个元素为:10
最后一个元素为:40
请按任意键继续. . .

3.7 list反转和排序

功能描述:将容器中的元素反转,以及将容器中的数据进行排序

函数原型:

reverse(); //反转链表
sort();    //链表排序
#include <iostream>
using namespace std;
#include<list>
#include<algorithm>
//list反转和排序
//reverse(); //反转链表
//sort();    //链表排序void printList(const list<int>& L)
{for (list<int>::const_iterator it = L.begin(); it != L.end(); it++){cout << *it << " ";}cout << endl;
}
void test01()
{//创建list容器list<int>L1;//默认构造//尾插L1.push_back(20);L1.push_back(10);L1.push_back(50);L1.push_back(40);L1.push_back(30);cout << "反转前:" << endl;printList(L1);cout << "反转后:" << endl;//反转L1.reverse();printList(L1);
}bool myCompare(int v1, int v2)
{//降序 就让第一个数 > 第二个数return v1 > v2;
}void test02()
{//创建list容器list<int>L1;//默认构造//尾插L1.push_back(20);L1.push_back(10);L1.push_back(50);L1.push_back(40);L1.push_back(30);cout << "排序前:" << endl;printList(L1);//所有不支持随机访问迭代器的容器,不可以用标准算法//不支持随机访问迭代器的容器,内部会提供对应的一些算法//sort(L1.begin(), L1.end());cout << "排序后:" << endl;L1.sort();//默认排序规则 从小到大 升序printList(L1);//降序L1.sort(myCompare);printList(L1);
}int main()
{test01();test02();system("pause");return 0;
}

输出结果:

反转前:
20 10 50 40 30
反转后:
30 40 50 10 20
排序前:
20 10 50 40 30
排序后:
10 20 30 40 50
50 40 30 20 10
请按任意键继续. . .

3.8排序案例

功能描述:将Person自定义数据类型进行排序,Person中属性有姓名,年龄,身高

排序规则:按照年龄进行升序,如果年龄相同按照身高进行降序

#include <iostream>
using namespace std;
#include<string>
#include<list>
#include<algorithm>
//list容器 排序案例 对于自定义数据类型 做排序
//按照年龄进行升序,如果年龄相同按照身高进行降序
class Person
{
public:Person(string name, int age, int height){this->m_Name = name;this->m_Age = age;this->m_Height = height;}string m_Name;//姓名int m_Age;//年龄int m_Height;//身高
};
//指定排序规则
bool myCompare(Person& p1, Person& p2)
{//按照年龄进行升序if (p1.m_Age != p2.m_Age){return p1.m_Age < p2.m_Age;}else{return p1.m_Height > p2.m_Height;}
}void test01()
{//创建list容器list<Person>L;//默认构造//准备数据Person p1("刘备", 35, 175);Person p2("曹操", 45, 180);Person p3("孙权", 40, 170);Person p4("赵云", 25, 190);Person p5("张飞", 35, 160);Person p6("关羽", 35, 200);//插入数据 尾插L.push_back(p1);L.push_back(p2);L.push_back(p3);L.push_back(p4);L.push_back(p5);L.push_back(p6);for (list<Person>::iterator it = L.begin(); it != L.end(); it++){cout << "姓名:" << (*it).m_Name << " 年龄:" << it->m_Age << " 身高:" << it->m_Height << endl;}//排序cout << "------------------------------" << endl;cout << "排序后:" << endl;L.sort(myCompare);for (list<Person>::iterator it = L.begin(); it != L.end(); it++){cout << "姓名:" << (*it).m_Name << " 年龄:" << it->m_Age << " 身高:" << it->m_Height << endl;}
}int main()
{test01();system("pause");return 0;
}

输出结果:

姓名:刘备 年龄:35 身高:175
姓名:曹操 年龄:45 身高:180
姓名:孙权 年龄:40 身高:170
姓名:赵云 年龄:25 身高:190
姓名:张飞 年龄:35 身高:160
姓名:关羽 年龄:35 身高:200
------------------------------
排序后:
姓名:赵云 年龄:25 身高:190
姓名:关羽 年龄:35 身高:200
姓名:刘备 年龄:35 身高:175
姓名:张飞 年龄:35 身高:160
姓名:孙权 年龄:40 身高:170
姓名:曹操 年龄:45 身高:180
请按任意键继续. . .

总结:

对于自定义数据类型,必须要指定排序顺序,否则编译器不知道如何进行排序

高级排序只是在排序规则上再进行一次逻辑规则制定,并不复杂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用C#的winform控制数据库实例服务的运行状态

一、得到sqlserver的实例名 二、引用对应的程序集和命名空间 using System.ServiceProcess; C#操作服务要用的类 ServiceController 声明类 private ServiceController serviceController new ServiceController("MSSQLSERVER"); 三、判断服务状态 serviceCon…

上证指数000001行情数据API接口

# 测试&#xff1a;返回不超过10条数据&#xff08;2年历史&#xff09; https://tsanghi.com/api/fin/index/CHN/daily?tokendemo&ticker000001&order2Python示例 import requestsurl f"https://tsanghi.com/api/fin/index/CHN/daily?tokendemo&ticker000…

要将镜像推送到GitLab的Registry中的步骤

1、通过cli 模式登录gitlab &#xff08;命令行模式&#xff09; docker login git.asc-dede.de Username: haiyang Password: Login Succeeded 2、查看我的本地镜像&#xff1a; 3&#xff0c;推送镜像apollo_core到对应的gitlab项目的Registry 中 docker push registry.gi…

「Linux系列」Linux简介及常见的Linux系统

文章目录 一、Linux简介二、常见的Linux系统三、Linux 应用领域四、Linux对比Windows五、相关链接 一、Linux简介 Linux是一种自由和开放源代码的类Unix操作系统&#xff0c;它最初是作为Unix操作系统的替代品而开发的。Linux操作系统的内核由林纳斯托瓦兹在1991年首次发布&am…

Sunday 算法介绍

1. Sunday 算法介绍 「Sunday 算法」 是一种在字符串中查找子串的算法&#xff0c;是 Daniel M.Sunday 于1990年提出的字符串模式匹配算法。 Sunday 算法思想&#xff1a;对于给定文本串 T 与模式串 p&#xff0c;先对模式串 p 进行预处理。然后在匹配的过程中&#xff0c;当发…

UE5.1 iClone8 正确导入角色骨骼与动作

使用iClone8插件Auto Setup 附录下载链接 里面有两个文件夹,使用Auto Setup C:\Program Files\Reallusion\Shared Plugins 在UE内新建Plugins,把插件复制进去 在工具栏出现这三个人物的图标就安装成功了 iClone选择角色,导入动作 选择导出FBX UE内直接导入 会出现是否启动插件…

docker的常用指令

docker的常用指令 从docker镜像仓库&#xff0c;搜索所有和mysql有关的镜像 docker search mysql 从docker仓库拉取mysql docker pull mysql这里的mysql是指使用search搜索出来的所有容器的NAME 如果和我一样遇到以下问题&#xff1a; 我可以登录阿里云的官网&#xff0c;找…

基于springboot+vue实现计算机等级考试报名系统项目【项目源码+论文说明】计算机毕业设计

基于springbootvue实现计算机等级考试报名演示 摘要 在进入二十一世纪之后&#xff0c;网络发展越来越迅速&#xff0c;人们的很多生活习惯与消费习惯都随之发生了改变&#xff0c;计算机技术为人们的生活带来了很多的便利。而计算机技术是我国各个教育阶段中的一门必修课程&a…

Golang中map数据结构字段解析

Golang里map底层数据结构具体如下图所示&#xff1a; map其实就是一个指向 hmap 的指针&#xff0c;占用了8个字节 hmap各自段存放的字段意义如下&#xff1a; 字段含义countmap中元素的个数&#xff0c;对应len (map)的值flags状态标志位&#xff0c;标记map的一些状态B桶数…

Spring中使用内置的tomcat容器启动后自动退出问题解决方法

在Spring中使用内置的tomcat 启动后自动退出 退出代码为0 且不报任务错误的解决方法. 日志如下: Connected to the target VM, address: 127.0.0.1:51129, transport: socket 三月 15, 2024 11:55:00 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing Proto…

C/C++ Socket 获取或设置 TCP MSS 大小

通过 Socket 系统接口&#xff0c;链接到一个TCP服务器&#xff0c;那么在链接成功之后会被配置一个从本地端到目的端最佳的TCP_MSS大小。 我们通过这个特点&#xff0c;即可轻松的实现&#xff0c;链路MTU大小发现功能&#xff0c;在不依赖ROOT管理员权限的情况下&#xff0c;…

免费阅读篇 | 芒果YOLOv8改进111:注意力机制CBAM:轻量级卷积块注意力模块,无缝集成到任何CNN架构中,开销可以忽略不计

&#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接&#xff1a; 芒果YOLOv8深度改进教程 该篇博客为免费阅读内容&#xff0c;YOLOv8CBAM改进内容&#x1f680;&#x1f680;&am…

ansible 部署FATE集群单边场景

官方文档&#xff1a; https://github.com/FederatedAI/AnsibleFATE/blob/main/docs/ansible_deploy_FATE_manual.md https://github.com/FederatedAI/AnsibleFATE/blob/main/docs/ansible_deploy_two_sides.md gitee详细文档&#xff1a; docs/ansible_deploy_one_side.md…

确保云原生部署中的网络安全

数字环境正在以惊人的速度发展&#xff0c;组织正在迅速采用云原生部署和现代化使用微服务和容器构建的应用程序&#xff08;通常运行在 Kubernetes 等平台上&#xff09;&#xff0c;以推动增长。 无论我们谈论可扩展性、效率还是灵活性&#xff0c;对于努力提供无与伦比的用…

服务器遭遇挖矿病毒syst3md及其伪装者rcu-sched:原因、症状与解决方案

01 什么是挖矿病毒 挖矿病毒通常是恶意软件的一种&#xff0c;它会在受感染的系统上无授权地挖掘加密货币。关于"syst3md"&#xff0c;是一种特定的挖矿病毒&#xff0c;它通过在受感染的Linux系统中执行一系列复杂操作来达到其目的。这些操作包括使用curl从网络下载…

爬虫逆向实战(36)-某建设监管平台(RSA,魔改)

一、数据接口分析 主页地址&#xff1a;某建设监管平台 1、抓包 通过抓包可以发现网站首先是请求了一个/prod-api/mohurd-pub/vcode/genVcode的接口&#xff0c;用于获取滑块验证码的图片 滑块验证之后&#xff0c;请求了/prod-api/mohurd-pub/dataServ/findBaseEntDpPage这…

【C语言】—— 指针一 : 初识指针(上)

【C语言】—— 指针一 &#xff1a; 初识指针&#xff08;上&#xff09; 一、内存和地址1.1、如何理解内存和地址1.2、 如何理解编址 二、指针变量和地址2.1、取地址操作符 &2.2、 指针变量2.3、 解引用操作符 ∗ * ∗2.4、指针变量的大小 三、指针变量类型的意义3.1、 指…

【网络安全】 MSF提权

本文章仅用于信息安全学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若读者因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与作者无关。 环境准备&#xff1a; 名称系统位数IP攻击机Kali Linux6410.3.0.231客户端Windows 76410.3.0.234…

计算机考研|408专业课复习教程+注意事项

408其实把真题琢磨透就已经可以了&#xff01;其实大部分考研党复习到最后真题都来不及刷完就要上考场 因为在考研后期时间分配真的很困难&#xff01;特别是数学和408 本人双非科班出身备考408成功上岸&#xff0c;在这里也想给想考408的学弟学妹们一些很中肯的&#xff0c;…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Slider)

滑动条组件&#xff0c;通常用于快速调节设置值&#xff0c;如音量调节、亮度调节等应用场景。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Slider(options?: SliderOption…