c++如何定义一个结构体队列
普通的就是queue<int>p1;queue<double>p2;那如果类型是结构体呢?要用到指针嘛?...
普通的就是
queue<int>p1;
queue<double>p2;
那如果类型是结构体呢?
要用到指针嘛? 展开
queue<int>p1;
queue<double>p2;
那如果类型是结构体呢?
要用到指针嘛? 展开
推荐于2017-09-05 · 知道合伙人软件行家
gongxinheng
知道合伙人软件行家
向TA提问 私信TA
知道合伙人软件行家
采纳数: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参考:
展开全部
struct MyStruct{
// blabla...
}
queue<MyStruct> ps; // OK 队列中每个元素都是一个结构体,和基本类型int等一样的用法,但是使用中会用到MyStruct的【拷贝构造】和【赋值运算符】,当MyStruct中存在指针变量时就需要非常小心避免出现野指针。
queue<MyStruct*> pps; // OK 队列中每个元素都是一个指针,指针实际指向的结构体空间的分配与释放都需要程序员进行维护。
// blabla...
}
queue<MyStruct> ps; // OK 队列中每个元素都是一个结构体,和基本类型int等一样的用法,但是使用中会用到MyStruct的【拷贝构造】和【赋值运算符】,当MyStruct中存在指针变量时就需要非常小心避免出现野指针。
queue<MyStruct*> pps; // OK 队列中每个元素都是一个指针,指针实际指向的结构体空间的分配与释放都需要程序员进行维护。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
include<queue>
struct point
{
int x;
int y;
};
queue<point> q;
struct point
{
int x;
int y;
};
queue<point> q;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询