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

2025-01-31 01:20:12
推荐回答(3个)
回答1:

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

#include 
struct MyStruct
{
int num;
};
int main()
{
// 定义队列
std::queue 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 
#include 
struct MyStruct
{
int num;
};
int main()
{
// 定义双端队列
std::deque 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 = " < 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/

回答2:

struct MyStruct{

// blabla...
}

queue ps; // OK 队列中每个元素都是一个结构体,和基本类型int等一样的用法,但是使用中会用到MyStruct的【拷贝构造】和【赋值运算符】,当MyStruct中存在指针变量时就需要非常小心避免出现野指针。
queue pps; // OK 队列中每个元素都是一个指针,指针实际指向的结构体空间的分配与释放都需要程序员进行维护。

回答3:

include
struct point
{
int x;
int y;
};
queue q;