STL中的stack和queue和priority_queue的使用和模拟实现

19 篇文章 2 订阅
订阅专栏

目录

 

1.STL中stack的基本操作:

2.STL中queue的基本操作

3.stack的模拟实现:

4.queue的模拟实现:

5.priority_queue:(优先级队列同样也是容器适配器------>就是包装其他结构)

5.1priority_queue的使用:

5.2priority_queuede模拟实现:

6.STL库中创建堆的函数及其使用:

1.什么是仿函数

关于栈和队列几个问题:

1.为什么栈没有提供迭代器呢?

2.逆波兰表达式———————后缀表达式

3.双端队列:为什么标准库中stack要用deque作为底层结构,而不使用vector?为什么queue要用deque作为底层结构,而不使用list?

         1.什么是双端队列:

         2.双端队列的优势:

         3.双端队列的缺点:

         4.所以综上所述,用deque而不用vector的原因是:

4.为什么堆要删除堆顶的元素,而不是删除末尾元素?


 

  • 1.STL中stack的基本操作:

    7ddbb1d0400583f43ee9cbd2c419ddf8.png

  • 2.STL中queue的基本操作

    f0b3033b0ac40a33cb3ca109b3b42fc8.png

  • 3.stack的模拟实现:

  • stack的实现实际就是将vector重新包装了一下,就形成了一种新的结果------适配器||配接器
    #include<iostream>
    #include<vector>
    #include<stack>
    using namespace std;
    
    namespace wbx
    {
    	template<class T, class container = std::vector<T>>
    	class stack
    	{
    	public:
    		stack()
    			:con()
    		{}
    		void push(const T& data)
    		{
    			con.push_back(data);
    		}
    		void pop()
    		{
    			con.pop_back();
    		}
    		size_t size()
    		{
    			return con.size();
    		}
    		T& top()
    		{
    			return con.back();
    		}
    		bool empty()
    		{
    			return con.empty();
    		}
    		stack& swap(stack &s)
    		{
    			con.swap(s.con);
    			return *this;
    		}
    	private:
    		container con;
    	};
    }
    
    void test_stack()
    {
    	wbx::stack<int> s;
    	s.push(1);//插入元素
    	s.push(2);
    	s.push(3);
    	s.push(4);
    	cout << s.size() << endl;//打印元素个数
    	cout << s.top() << endl;//打印栈顶元素
    	s.top() += 1;//修改栈顶元素
    	cout << s.top() << endl;//打印栈顶元素
    	s.pop();//出栈
    	s.pop();
    	s.pop();
    	cout << s.size() << endl;
    	cout << s.top() << endl;
    	wbx::stack<int> s2;
    	s2.push(9);//插入元素
    	s2.push(9);
    	s2.push(9);
    	s2.push(9);
    	s2.swap(s);
    	cout << s.size() << endl;
    	cout << s.top() << endl;
    }
    
    int main()
    {
    	test_stack();
    	return 0;
    
  • 运行结果:

    6c2108aac2f7d71b90d31f6d46e47685.png

  • 4.queue的模拟实现:

  • 因为队列要进行头删和尾插,因此使用vector封装来实现效率太低,故可以借助list来模拟实现queue。
    namespace wbx
    {
    	template<class T, class container = std::list<int>>
    	class queue{
    	public:
    		queue()
    		: con()
    		{}
    		void push(const T& data)
    		{
    			con.push_back(data);
    		}
    		void pop()
    		{
    			con.pop_front();
    		}
    		bool empty()
    		{
    			return con.empty();
    		}
    		size_t size()
    		{
    			return con.size();
    		}
    		T& front()
    		{
    			return con.front();
    		}
    		T& back()
    		{
    			return con.back();
    		}
    		queue& swap(queue &q)
    		{
    			con.swap(q.con);
    			return *this;
    		}
    	private:
    		container con;
    	};
    }
    
    void test_queue()
    {
    	wbx::queue<int> q;
    	q.push(1);//插入元素
    	q.push(2);
    	q.push(3);
    	q.push(4);
    	q.push(5);
    	cout << q.size() << endl;//打印队列中元素个数
    	cout << q.front() << endl;//打印队头元素
    	cout << q.back() << endl;//打印队尾元素
    	q.front() += 1;//修改队头元素
    	q.back() += 1;//修改队尾元素
    	cout << q.front() << endl;//打印队头元素
    	cout << q.back() << endl;//打印队尾元素
    	q.pop();//出队列
    	q.pop();
    	cout << q.size() << endl;//打印队列中元素个数
    	cout << q.front() << endl;//打印队头元素
    	cout << q.back() << endl;//打印队尾元素
    	wbx::queue<int> q1;
    	q1.push(9);//插入元素
    	q1.push(9);
    	q1.push(9);
    	q1.push(9);
    	q1.push(9);
    	wbx::queue<int> q2;
    	q2=q.swap(q1);
    }	
    
    int main()
    {
    	test_queue();
    	return 0;
    }
  • 运行结果:

    8d3126008944eae7b6ea9619ba01d70b.png

  • 5.priority_queue:(优先级队列同样也是容器适配器------>就是包装其他结构)

    2f76b7b77844d54aa2ba10dbfbcb33e1.png

  • 5.1priority_queue的使用:

  • 用priority_queue创建大堆和小堆(传入less(当然默认传入的就是less)创建大堆,传入greater创建小堆)

    9204a223b2b1d8a45b683e8a91734966.png

  • 这里的greater是一个比较方式的模板,返回x>y的结果。

    e6f4e9dabf7fdd3488a6cdcbe0089e9f.png

  • 当我们往堆中传入自定义类型的时候是需要我们在自己的自定义类型中重载">"和"<"运算符的,因为greater和less是要返回'<'和'>'的结果的

    9a17290400af25a9da33936163bd1777.png

  • 上面这里不加const所报的错

    636947e4e82dc3b67ca82ba3689e3e85.png

  • 当我们传入的参数不是自定义类型,而是诸如指针之类的参数时,我们自定义类型中的重载运算符就不够用了,就需要我们自己定义比较函数

    9557171b86c7bcbdc1c8ba4184d3579c.png

  • 5.2priority_queuede模拟实现:

    #include<iostream>
    #include<queue>
    #include<stdio.h>
    #include<algorithm>
    #include<functional>
    #include<assert.h>
    using namespace std;
    
    namespace wbx
    {
    
    	template<class T,class container=vector<T>,class Com=less<T>>
    	class priority_queue
    	{
    	public:
    		priority_queue()
    			:_con()
    		{}
    		template<class iterator>
    		priority_queue(iterator first,iterator last)
    		:_con(first,last)
    		{
    			size_t csize = size();
    			for (int i = (csize - 2) / 2; i >= 0; i--)
    			{
    				AdjustDonw(i);
    			}
    		}
    		~priority_queue()//这里不用写析构函数也会自动生成一份析构函数,调用_con的析构函数对资源进行销毁
    		{
    			_con.~_con();
    		}
    		size_t size()const
    		{
    			return _con.size();
    		}
    		void push(T data)
    		{
    			_con.push_back(data);
    			AdjustUp(size() - 1);
    		}
    		void pop()
    		{
    			if (empty())
    			{
    				return;
    			}
    			std::swap(_con[0], _con[size() - 1]);
    			_con.pop_back();
    			AdjustDonw(0);
    		}
    		bool empty()const
    		{
    			return _con.empty();
    		}
    		const T& top()const
    		{
    			if (empty())
    			{
    				assert(false);
    			}
    			return _con[0];
    		}
    	private:
    		//用于构造堆和删除元素
    		//不可以用于插入元素因为当用于插入元素时,这里模拟一个场景,如果此时堆是一个大堆,其堆顶是最大元素
    		//当插入元素大于堆顶元素的时候,交换插入元素和堆顶元素那么此时向下调整是无法执行的,因为此时交换
    		//之后还满足堆的特性
    		void AdjustDonw(int root)
    		{
    			size_t csize = size();
    			int parent = root;
    			int child = parent * 2 + 1;//左孩子
    			//Com com;//这里Com是一个比较的模板类是一个类型,初始化一个com对象进行比较
    			while (child < csize)
    			{
    				//找出左右孩子中较大的一个,因为默认比较是less返回左<右,如果条件成立则就标记大的
    				//一个,创建大堆而当我们传入的是greater时返回的就是右>左,如果条件成立则标记较小
    				//的一个创建小堆。
    				if (child+1 < csize&&_com(_con[child] , _con[child + 1]))
    				{
    					child = child + 1;
    				}
    				//如果不满足堆的特性则交换父子节点
    				if (_com(_con[parent], _con[child]))
    				{
    					std::swap(_con[parent], _con[child]);
    				}
    				else
    				{
    					return ;
    				}
    				parent = child;
    				child = parent * 2 + 1;
    			}
    		}
    		//用于插入元素
    		void AdjustUp(int child)
    		{
    			int parent = (child - 1) / 2;
    			//Com com;
    			size_t csize = size();
    			while (parent >= 0)
    			{
    				if (child+1<csize&&_com(_con[child], _con[child+1]))
    				{
    					child = child + 1;
    				}
    				if (_com(_con[parent], _con[child]))
    				{
    					std::swap(_con[parent], _con[child]);
    				}
    				else
    				{
    					return;
    				}
    				child = parent;
    				parent = (child - 1) / 2;
    			}
    		}
    		container _con;
    		Com _com;
    	};
    	class Date
    		{
    		public:
    			Date(int year,int month,int day)
    				:_year(year),
    				_month(month),
    				_day(day)
    			{}
    			bool operator<(const Date& d)const
    			{
    				if ((_year < d._year)||
    					(_year == d._year&&_month < d._month) ||
    					(_year == d._year&&_month == d._month&&_day < d._day))
    				{
    					return true;
    				}
    				return false;
    			}
    			bool operator>(const Date& d)const
    			{
    				if ((_year > d._year) ||
    					(_year == d._year&&_month > d._month) ||
    					(_year == d._year&&_month == d._month&&_day > d._day))
    				{
    					return true;
    				}
    				return false;
    			}
    		private:
    			int _year;
    			int _month;
    			int _day;
    		};
    }
    
    void test_priority_queue1()
    {
    	wbx::priority_queue<int> q1;//默认传递的比较方式为(priority_queue<int,vector<int>,less<int>>)
    	//less,创建一个大堆
    	q1.push(6);
    	q1.push(9);
    	q1.push(0);
    	q1.push(-1);
    	q1.push(5);
    	cout << q1.top() << endl;
    	wbx::priority_queue<int, vector<int>, greater<int>> q2;//创建一个小堆
    	q2.push(6);
    	q2.push(9);
    	q2.push(0);
    	q2.push(-1);
    	q2.push(5);
    	vector<int> array = { 1, 2, 4, 5,6, 8, 7, 9 };
    	vector<int> array1 = { 9,8,7,6,5,4,3,2,1 };
    	wbx::priority_queue<int, vector<int>, greater<int>> q3(array1.begin(), array1.end());//用数组中元素创建一个堆
    	q3.push(0);
    	q3.pop();
    
    }
    void test_priority_queue2()
    {
    	wbx::priority_queue<wbx::Date, vector<wbx::Date>, less<wbx::Date>> q1;
    	wbx::Date d1(1999, 3, 3);
    	wbx::Date d2(1988, 3, 3);
    	wbx::Date d3(2000, 3, 3);
    	wbx::Date d4(2011, 4, 4);
    	q1.push(d1);
    	q1.push(d2);
    	q1.push(d3);
    	q1.push(d4);
    	wbx::priority_queue<wbx::Date, vector<wbx::Date>, greater<wbx::Date>> q2;
    	q2.push(d1);
    	q2.push(d2);
    	q2.push(d3);
    	q2.push(d4);
    }
    
    //bool Isless(const wbx::Date& left,const wbx::Date& right)
    //{
    //	return left < right;
    //}
    //
    //typedef bool(*com)(wbx::Date& left, wbx::Date& right);
    
    template<class T>
    //仿函数
    class com
    {
    public:
    	bool operator()(const T& left,const T& right)
    	{
    		return left < right;
    	}
    };
    void test_priority_queue3()
    {
    	wbx::priority_queue<wbx::Date, vector<wbx::Date>, com<wbx::Date>> q1;
    	wbx::Date d1(1999, 3, 3);
    	wbx::Date d2(1988, 3, 3);
    	wbx::Date d3(2000, 3, 3);
    	wbx::Date d4(2011, 4, 4);
    	q1.push(d1);
    	q1.push(d2);
    	q1.push(d3);
    	q1.push(d4);
    	wbx::priority_queue<wbx::Date, vector<wbx::Date>, greater<wbx::Date>> q2;
    	q2.push(d1);
    	q2.push(d2);
    	q2.push(d3);
    	q2.push(d4);
    }
    
    int main()
    {
    	test_priority_queue1();
    	test_priority_queue2();
    	test_priority_queue3();
    	return 0;
    }
  • 6.STL库中创建堆的函数及其使用:

    0c58661eb6aae83e9d403d820b72b59b.png

  • 当然函数指针使用起来太麻烦一般我们使用仿函数
  • 1.什么是仿函数

  • 仿函数---->也称为函数对象----->可以像函数调用一样使用的对象,在类中将()重载():称为函数调用运算符

    bbe6baa12af3a13e78c1200418e5d09b.png

  • 关于栈和队列几个问题:

    • 1.为什么栈没有提供迭代器呢?

      a07a07167d9f69e46921c1cda9674494.png

    • 答案:栈的特性:只需要在一段进行数据的插入和删除操作,栈是不需要遍历的,所以是不需要迭代器的。string,list,vector的迭代器主要的目的是为了方便对迭代器中的元素进行遍历配合算法透明化使用容器。
    • 2.逆波兰表达式———————后缀表达式

    • 答案:1+2:中缀表达式---->运算符在两个操作数中间人更加直观的识别
    • 1 2 +:后缀表达式----->逆波兰表达式 RPN
    • 计算机在对四则运算进行混合求值的时候,会将中缀表达式转化为后缀表达式来求值
    • 3.双端队列:为什么标准库中stack要用deque作为底层结构,而不使用vector?为什么queue要用deque作为底层结构,而不使用list?

    • 答案:
    • 1.什么是双端队列:

      • 双端队列就是一个可以进行头插头删,尾插尾删操作的队列。

        27f2fe5ab861b651531cc8536a476e60.png

      • 双端队列存储元素:

        b0cba01825260e0b31bc3378c53abcf0.png

      • 双端队列的迭代器:

        e32709d300ccd54e597b3f844dd9d56d.png

    • 2.双端队列的优势:

      • 1、例如vector在扩容时如果vector中放的不是内置类型元素,则需要将vector中的元素全部搬移深拷贝到新的空间(例如我们将vector中放入string类元素。那么当我们拷贝时要调用string类中的‘=’运算符重载,而不可以直接memcpy),这里处理大量的元素是十分耗费时间的,而deque的话当它扩容时将存储元素的小空间再重新开辟一小段即可,如果存储小空间首地址的map存储满了之后可以将map的空间增大,将原来map中的地址逐字节拷贝即可,不会耗费大量时间。
      • 2、因为双端队列在头部和尾部都可以直接插入元素而不需要遍历,因此头插和尾插的效率都是O(1)。
      • 3、因为存储元素时在一小段一小段存储空间中存储,不像是list一个节点一个节点的存储,不容易造成内存碎片。
    • 3.双端队列的缺点:

      • 1、代码实现复杂,实现双端队列的实现需要实现存储空间,和存储小段存储空间的map,类似于一个动态的二维数组。,而且双端队列的迭代器需要维护四个迭代器。实现复杂。
      • 2、其次双端队列的遍历十分复杂每次遍历都需要进行判断,或跳转,因此不适用于遍历元素的操作,例如我们要想对其中元素进行排序时,可以先将其中元素放入vector当中去,然后排序之后再将其拷贝回去。
    • 4.所以综上所述,用deque而不用vector的原因是:

    • 一、stack使用deque不使用vector的原因
    • 1.stack不需要对其全部元素进行遍历,只需要对它的尾部进行操作,因而避免了deque的缺点。
    • 2.deque扩容时比vector 的效率高,因为deque扩容时不需要搬移元素,只需要memcpy即可。
    • 二、queue使用deque不使用list的原因:
    • 1.deque中不需要存储一些额外的元素,假如用list存储元素还要存储它的前后节点的指针,而deque中只存储了元素。无需存储其他元素。
    • 2.deque是分段存储的,缓存效率高。
    • 3.队列不需要遍历,deque的劣势规避。
    • 4.为什么堆要删除堆顶的元素,而不是删除末尾元素?

    • 答案:因为堆顶元素就是所有元素中最大的或者最小的,所以删除的肯定是堆顶元素 对其他元素操作没有意义,这个是堆的特性。
  •  

 

浅整理一下STL(顺序式容器)vector、stackqueuepriority_queue、list
WSY444的博客
03-01 682
顺序式容器: 关于vector的简单用法: 头文件:<vector> 1.vector动态数组,从末尾能快速插入与删除,直接访问任何元素。 2.vector能用来存放任何类型的对象: Int:vector<int>a;//默认初始值,a为空 vector<int>b(a);//用a定义b vector<int>a(100);//有100个值为0的元素 vector<int>a(100,6)......
C++ STL的容器适配器 stackqueuepriority_queue
Butayarou的博客
04-07 3790
C++ STL的容器适配器 stackqueuepriority_queue 和 deque 简介。
C++ STL:优先级队列priority_queue使用方法和模拟实现
weixin_43908419的博客
04-04 1167
本文对优先级队列的结构、常见接口的使用方法及模拟实现进行了详细解读
C++STL】【queue使用模拟实现】【priority_queue使用模拟实现
芊樱烛渊的博客
09-24 550
1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)操作,其从容器一端插入元素,另一端提取元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素元素从队尾入队列,从队头出队列。3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:empty:检测队列是否为空size:返回队列有效元素的个数front:返回队头元素的引用。
STLstackqueuepriority_queue模拟实现
m0_51064412的博客
09-21 201
文章目录一. 一.
STL-优先队列-队列-栈
05-03
STL,优先队列是通过`priority_queue`容器实现的。优先队列的元素是按照其优先级从高到低排列的,高优先级的元素先出队列。 优先队列的使用方法有三种: 1. 使用默认的比较函数。在这种方法元素类型的`...
MyStl:自己实现STL
04-30
实现自己的STL 环境 Microsoft Windows 10 Visual Studio 2015 c++11 要点 模板实现 traits编程技巧 c++11 自定义内存管理 常用数据结构 主体内容 两级空间配置器 基本迭代器及特例化 底层数据结构:rbtree,...
mlib:使用纯C语言(C99或C11)的通用容器和类型安全容器的,用于容器的广泛收集(与C ++ STL比较)
01-30
mlib:使用纯C语言(C99或C11)的通用容器和类型安全容器的,用于容器的广泛收集(与C ++ STL比较)
STL-基础数据类型的基本用法
01-21
STL-ARR,arry, file,list,map,priority_queue,set,share_ptr,stack,string,template,等基本数据类型
标准模板STL练习题.docx
06-13
STL 提供了多种适配器,如 stackqueuepriority_queue 等。这些适配器可以将容器转换为不同的数据结构。 5.1 适配器的种类 STL 提供了多种适配器,如 stackqueuepriority_queue 等。每种适配器都有其...
STL——优先队列priority_queue 的用法
m0_52711790的博客
10-26 178
要包含头文件#include<queue> priority_queue< type, container, function> type :类型 container:实现优先队列的底层容器(可缺省) function:元素之间的比较方式(可缺省) 对于container,要求必须是数组形式实现的容器,例如vector、deque,而不能使list。 在STL,默认情况下(不加后面两个参数)是以vector为容器,以 operator< 为比较方式,所以在只使用第一个参数
C++——优先级队列(priority_queue)的使用实现
热门推荐
weixin_47257473的博客
03-02 1万+
我们之前讲过数据结构的队列,它具有先进先出的特性(FIFO).添加元素时只能在队尾插入,删除元素时只能删除队首的元素而优先级队列,它并不满足先进先出的特性,倒像是数据结构的“堆”.优先级队列每次出队时只能是队列优先级最高的元素而不是队首的元素。这个优先级可以通过元素的大小,或者赋值运算符重载等进行比较例如定义元素越大,优先级越高,那么每次出队的时候一定是队列最大的元素,因为它的优先级最高.并且重新进行维护.经过上述的说明,是不是和我们所说的“堆”很相似,优先级队列的内部确实是由堆结构实现.
C++ 学习(18)STL - deque容器、stack容器、queue容器
ling1998的博客
08-02 571
本章主要学习: deque容器及常用接囗(构造函数、赋值操作、大小操作、插入和删除、数据读取、排序)、stack容器及常用接囗(构造函数、赋值操作、数据存取、大小操作)、queue容器及常用接囗(构造函数、赋值操作、数据存取、大小操作)...
Java PriorityQueue iterator()方法与示例
cumtv80668的专栏
07-10 635
PriorityQueue类的iterator()方法 (PriorityQueue Class iterator() method) iterator() method is available in java.util package. iterator()方法在java.util包可用。 iterator() method is used to iterates the elements...
STL容器之queuepriority_queue
dengwenmang7886的博客
06-26 78
STL的顺序容器还有最后两种,这两种都是适配器,分别是queuepriority_queue,这两种容器用法基本相同,所以就放在一块说了。他俩的构造函数形式与stack完全一样,而且都包含在queue头文件。 他们提供的操作如下: queue: back() 返回最后一个元素 empty() 如果队列空则返回真 front() 返回第一个元素 pop() 删除第一个...
STLpriority_queue实现详解
一个菜鸟的博客
03-17 1455
优先队列 优先队列可以从尾部插入元素,然后从头部取出优先级(通过一个数值表示)最高的对象。这种支持插入,然后每次仅仅取出一个对象数据结构,完全天然和堆一一对应,所以通过堆实现优先队列适配器是天然的选择。也就是说最大堆其实就是优先队列。优先队列没有迭代器,进出都有一定的规则,只有queue顶端的元素(权重最高者),才有机会被外界取用。 STL源码 #ifndef __STL_LIMIT...
STL--迭代器(iterator)
weixin_34044273的博客
05-03 669
指针与数组 指针与其它数据结构呢?比如说链表? 存储空间是非连续的。不能通过对指向这种数据结构的指针做累加来遍历。 能不能提供一个行为类似指针的类,来对非数组的数据结构进行遍历呢?这样我们就能够以同样的方式来遍历所有数据结构(容器)。 迭代器(Iterator)是指针(pointer)的泛化,它允许程序员以相同的方式处理不同的数据结构(容器)。STL有五种类型的迭代器,它们分别满...
C++ STL的容器适配器
CZHLNN的博客
04-17 1035
stack & queue & priority_queue1 stack1.1 stack 介绍1.2 stack 使用1.3 stack 模拟实现1.4 deque 的简单介绍2 queue2.1 queue 介绍2.2 queue 使用2.3 queue 模拟实现3 priority_queue3.1 priority_queue 介绍3.2 priority_queue 使用3.3 priority_queue 模拟实现4 容器适配器模式二级目录三级目录 1 stack 1.1 st
stlstack实现深搜_深搜和广搜的原理及优缺点
weixin_39671964的博客
11-22 326
图的遍历方式有深度优先搜索(Deep-first Search,一条道走到底)和宽度优先搜索(Breath-first Search,一层一层的遍历)两种。1 深搜深搜是对最新产生的节点(即深度最大的节点)先进行扩展的方法,把扩展的节点从栈弹出删除。这样,一般在栈存储的节点数就是深度值,因此它占用的空间较少。所以,如果搜索树的节点较多,为避免溢出,深度优先搜索是一种有效的算法。1.1 深搜原理...
c++stl的容器
最新发布
05-15
C++ STL(Standard Template Library)提供了...除了上述容器外,STL还提供了一些其他的容器,如stackqueuepriority_queue等。这些容器都有各自的特点和使用场景,可以根据实际需要选择合适的容器来处理数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Xshell的安装及使用超详细教程 33736
  • 进程概念——PCB详讲 10340
  • c语言——指针作为函数形参,改变实参的值的问题。 6261
  • 错误码errno和perror函数 5554
  • C++之继承最详讲 5028

分类专栏

  • linux 30篇
  • 学习笔记 25篇
  • 函数 9篇
  • C++ 19篇
  • 项目 4篇
  • 交换机

最新评论

  • C++之继承最详讲

    m0_62208031: 是因为首地址的原因吗 p1存的是那个首地址和p3存的那个首地址一样

  • C++之继承最详讲

    m0_62208031: 请问一下 最后一题为什么是p1=p3!=p2啊 p3不是都继承p1和p2了吗 不应该相对于大集合吗 但是我打印p1p2p3的确是p1和p3的地址一样

  • 带你手把手实现Huffman压缩

    眸中客.: 你好,为啥压缩后的文件大小反而比原文件大了呢

  • Xshell的安装及使用超详细教程

    parsed: 没有安装包啊,直接点开也没法打开

  • 【C++】浅谈C++中的auto和decltype

    FlashWarrior: C++14之后支持了函数返回值auto类型推导

大家在看

  • 348Springboot协同过滤电影推荐系统电影评论电影论坛管理(源码+文档+运行视频+讲解视频)
  • 357Springboot学校防疫物资管理系统物资分配出入库存管理(源码+文档+运行视频+讲解视频)
  • P1161 LOTTO(DFS) 36
  • Milvus进行向量存储 184
  • JavaSE 面向对象程序设计进阶 继承和方法重写 2024理论与内存详解 33

最新文章

  • 【网络】多路转接模型epoll
  • 【网络】多路转接模型-poll
  • 【网络】五种IO模型以及select编程详讲
2022年58篇
2021年7篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月半木斤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源起什么游戏名字回到旧石器时代寓意的诗句起名字教育名称起名釜山行百度云资源湖北华图谷歌企业邮箱女儿起个洋气的小名国务院总理网游之天谴修罗txt下载属马男孩起名民主生活会征求意见表动漫欣赏艺术学校起什么名字大全李姓宝宝起名大全大全上海卫视在线直播女儿郑姓 起名公司起名 测算中文起名网上取名起名大全免费煤矿设备公司起名小学五年级作文从容不迫的意思电商店铺起名大全免费机关个人工作总结建设公司起名大全字库幼儿园卫生保健工作总结汉正街地图不伦纯爱玛格丽特阿特伍德淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化