c++如何定义一个结构体队列

普通的就是queue<int>p1;queue<double>p2;那如果类型是结构体呢?要用到指针嘛?... 普通的就是

queue<int>p1;
queue<double>p2;
那如果类型是结构体呢?
要用到指针嘛?
展开
 我来答
gongxinheng
推荐于2017-09-05 · 知道合伙人软件行家
gongxinheng
知道合伙人软件行家
采纳数:55 获赞数:380
6年游戏开发经验。曾在多个MMO PC游戏以及手游项目担任主程。 目前在美国华盛顿州立大学留学并参与研究项目

向TA提问 私信TA
展开全部

使用标准模板库(STL)中的std::queue就可以,不一定要用指针。比如:

#include <queue>
struct MyStruct
{
int num;
};
int main()
{
// 定义队列
std::queue<MyStruct> q;
MyStruct s1;
s1.num = 1;
// 插入队列
q.push(s1);
// 取出队首元素
MyStruct s1_copy = q.front();
// 队首元素从队列中移除
q.pop();

return 0;
}


队列的特征是先进先出(FIFO),所以push元素会放到队尾,pop元素会取出队头。

除此之外STL还提供了双端队列(deque)。顾名思义,双端队列可以在队列两头进行操作。所以提供了对应的*front和*back的操作。

以下是参考代码:

#include <queue>
#include <iostream>
struct MyStruct
{
int num;
};
int main()
{
// 定义双端队列
std::deque<MyStruct> q;
MyStruct s1;
s1.num = 1;
// 插入队尾
q.push_back(s1);
MyStruct s2;
s2.num = 5;
// 插入队首
q.push_front(s2);
// 取出队首元素
MyStruct s2_copy = q.front();
MyStruct s1_copy = q.back();
std::cout << "s2 = " <<s2_copy.num << std::endl;
std::cout << "s1 = " << s1_copy.num << std::endl;
// 队首元素从队列中移除
q.pop_front();
// 队尾元素从队列中移除
q.pop_back();

// 判断队列是否为空
if (q.empty())
{
std::cout << "Enpty" << std::endl;
}
return 0;
}


std::queue参考:

http://www.cplusplus.com/reference/queue/queue/

std::deque参考:

http://www.cplusplus.com/reference/deque/deque/

寻森良Z
推荐于2017-09-05 · TA获得超过368个赞
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:131万
展开全部
struct MyStruct{

// blabla...
}

queue<MyStruct> ps; // OK 队列中每个元素都是一个结构体,和基本类型int等一样的用法,但是使用中会用到MyStruct的【拷贝构造】和【赋值运算符】,当MyStruct中存在指针变量时就需要非常小心避免出现野指针。
queue<MyStruct*> pps; // OK 队列中每个元素都是一个指针,指针实际指向的结构体空间的分配与释放都需要程序员进行维护。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
墨水干了
2015-09-14 · TA获得超过961个赞
知道小有建树答主
回答量:1357
采纳率:44%
帮助的人:518万
展开全部
include<queue>
struct point
{
int x;
int y;
};
queue<point> q;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式