C++ queue结构体变量如何使用?

yyang0514 2010-09-26 05:38:41
目的是将压入队列的结构体变量再1个1个的读出来。
在ListQueue()函数中不知道应该如何完成?
或者在定义“typedef std::queue<MYSTR*> STRQUEUE;”就是错误,请高手指点如何完成?

#include <iostream>
#include <queue>

using namespace std;
struct mystr
{
int a;
int b;
};
typedef struct mystr MYSTR;

typedef std::queue<MYSTR*> STRQUEUE;

MYSTR str[5];

int IniStr()
{
for(int i=0;i<5;i++)
{
str[i].a=i;
str[i].b=i*11;
}
return 1;
}

int IniQueue(STRQUEUE* mystrqueue)
{
for(int i=0;i<5;i++)
{
mystrqueue->push(&str[i]);
}
return 1;
}

int ListQueue()
{
STRQUEUE* mystrqueue;
MYSTR* tempstr;
IniQueue(mystrqueue);
for(int i=0;i<mystrqueue->size();i++)
{
tempstr=mystrqueue->pop();
//编译提示“cannot convert from 'void' to 'struct mystr *'”
cout<<tempstr->a<<tempstr->b<<endl;
}
return 1;
}
...全文
990 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
旭子 2010-09-26
  • 打赏
  • 举报
回复
这个是全的

#include <iostream>
#include <queue>

using namespace std;
struct mystr
{
int a;
int b;
};
typedef struct mystr MYSTR;

typedef std::queue <MYSTR *> STRQUEUE;

MYSTR str[5];

int IniStr()
{
for(int i = 0;i < 5; i++)
{
str[i].a=i;
str[i].b=i*11;
}
return 1;
}

int IniQueue(STRQUEUE* mystrqueue)
{
for(int i = 0; i < 5; i++)
{
mystrqueue->push(&str[i]);
}
return 1;
}

int ListQueue()
{
STRQUEUE* mystrqueue = new STRQUEUE();
MYSTR* tempstr;
IniQueue(mystrqueue);
for(int i = 0; mystrqueue->size() != 0; i++)
{
tempstr = mystrqueue->front();
cout << tempstr->a << " " << tempstr->b << endl;
mystrqueue->pop();
}
delete mystrqueue;
return 1;
}

int main(int argc, char **argv)
{
IniStr();
ListQueue();
return 0;
}

liurenjie2008 2010-09-26
  • 打赏
  • 举报
回复
楼主你的代码里queue没有初始化吧
旭子 2010-09-26
  • 打赏
  • 举报
回复
楼主这是修改后的代码,可以运行了

#include <iostream>
#include <queue>

using namespace std;
struct mystr
{
int a;
int b;
};
typedef struct mystr MYSTR;

typedef std::queue <MYSTR *> STRQUEUE;

MYSTR str[5];

int IniStr()
{
for(int i = 0;i < 5; i++)
{
str[i].a=i;
str[i].b=i*11;
}
return 1;
}

int IniQueue(STRQUEUE* mystrqueue)
{
for(int i = 0; i < 5; i++)
{
mystrqueue->push(&str[i]);
}
return 1;
}

int ListQueue()
{
STRQUEUE* mystrqueue = new STRQUEUE();
MYSTR* tempstr;
IniQueue(mystrqueue);
for(int i = 0; i < mystrqueue->size(); i++)
{
mystrqueue->pop();
//编译提示“cannot convert from 'void' to 'struct mystr *'”
//cout << tempstr->a << tempstr->b << endl;
}
delete mystrqueue;
return 1;
}

int main(int argc, char **argv)
{
IniStr();
ListQueue();
return 0;
}

旭子 2010-09-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 namelij 的回复:]

我不明白为什么要 push指针进去?push对象不更方便吗?
[/Quote]
push对象进去 多一次到形参的拷贝,也就是压栈,是压一个指针效率高呢 还是把整个东西全部都压进去效率高呢
pengzhixi 2010-09-26
  • 打赏
  • 举报
回复
for(int i=0;i <mystrqueue->size();i++)
{
tempstr=mystrqueue->front();
cout <<tempstr->a <<tempstr->b <<endl;
mystrqueue->pop();

}
十八道胡同 2010-09-26
  • 打赏
  • 举报
回复
pop函数无返回值,错误说的很清楚了
  • 打赏
  • 举报
回复
我不明白为什么要 push指针进去?push对象不更方便吗?
Jim_King_2000 2010-09-26
  • 打赏
  • 举报
回复
std::queue的pop函数是没有返回值的。它的任务就是删除最前面的元素。因此程序应改为如下形式:


tempstr = mystrqueue->top();
mystrqueue->pop();
xiao0 1.c //纵向乘法表 2.c //标准乘法表 3.c //冒泡排序 4.c //验证算式正确 5.c //判断几位数 6.c //实现求二维数组的最大值 7.c //实现猜数 8.c //实现各位相加 9.c //实现求字符个数 10.c //求单词个数 xiao1 11.c //实现密码验证 12.c //实现str算法 13.c //折半法找数 14.c //递归汉诺 15.c //选择法排序 16.c //局部变量的生存期 17.c //全局变量的作用域 18.c //神奇的 i++ 19.c //预编译处理 20.c //神奇的指针 xiao.txt //刷题思路 xiao2 21.c //数组指针 22.c //出题验证系统 23.c //二维数组指针 24.c //秀秀指针 25.c //多级指针的应用 26.c //位运算 27.c //结构体变量 28.c //结构体指针 29.c //静态链表 30.c //动态链表 xiao3 31.c //共用体 32.c //文件的打开与关闭 33.c //文件的读和写 34.c //文件的块读 35.c //逆序输出 36.c //用指针的数值传递 37.c //if(0.5);if中的局部变量 38.c //指针交换地址不改原值 39.c //指针实现逆序输出 40.c //结构体传值 xiao4 41.c //结构体传数组值 42.c //结构体的各种赋值 43.c //结构体函数 44.c //结构体二维数组 45.c //学生信息管理系统 46.c //结构体函数 47.c //二维数组转一维 48.c //if(1?i>j:ic++经典程序 xiao0 1.cpp //hello world 2.cpp //goto跳转 3.cpp //可变参数 4.cpp //重载函数 5.cpp //面向对象 6.cpp //std 7.cpp //一元二次方程求根 8.cpp //求利润 9.cpp //求圆周率pi的近似值 10.cpp //Fibonacci数列 xiao1 11.cpp //分数序列求和 12.cpp //有序插入 13.cpp //数组元素逆置 14.cpp //杨辉三角 15.cpp //解密 16.cpp //比较两个字符串大小 17.cpp //冒泡排序 18.cpp //矩阵转置 19.cpp //字符串求最大值 20.cpp //复制字符串中的元音字母 xiao2 21.cpp //计算若干整数的和 22.cpp //神奇的c++stl库函数 23.cpp //最大最小数 24.cpp //全排列 25.cpp //数组逆置输出 26.cpp //set(集合) 27.cpp //vector(不定长数组) 28.cpp //map(映射) 29.cpp //结构体swap 30.cpp //结构体sort xiao3 31.cpp //计算两日期间隔 32.cpp //加密4个数 33.cpp //计算日期星期 34.cpp //queue(队列) 35.cpp //stack(栈) 36.cpp //sort 37.cpp //结构体sort 38.cpp //奶牛日光浴 39.cpp //lower_bound 40.cpp //贪心看电视 xiao4 41.cpp //两边同时减 42.cpp //贪心安排会场 43.cpp //iterator 44.cpp //背包问题 45.cpp //取数排列 46.cpp //全排列 47.cpp //节点 48.cpp //节点 49.cpp //村庄修公路 50.cpp //差分数组 xiao5 51.cpp //最大子段和 52.cpp //map应用 53.cpp //ASCII码排序 54.cpp //我的排序 55.cpp //隐藏的时间 56.cpp //好年份 57.cpp //最大最小值 58.cpp //由两天推日期 59.cpp //目标和 60.cpp //统计字符 xiao6 61.cpp //计算天数 62.cpp //统计单词
1. 连接oracle时,目录中不能有()字符,否则ADO是无法连接数据库的 修改: 2.1 去掉TCPChannel的BuildPacket函数,改成直接由OnRecv回调函数返回实际数据 去掉UDPChannel的Response函数,改成直接由内部处理 2.2 修改TCPChannel类,实现同步调用接口 定义IRPC接口用来处理同步调用的被调用端 定义Bind函数用来绑定IRPC接口的实例 定义CallEx函数用来实现用户同步调用 2.3 添加bInit变量,用于设置初始化和关闭状态。 设置此变量的目的主要是用来控制,在关闭了socket之后,后续的任何投递都不执行。 修改了IRPC接口名称为IRemoteProcCall,并且调整了部分结构体名称,如RPC相关的结构体, 组合包相关的结构体,以及P2P相关的结构体。 修改TCPChannel类的接口函数Bind成BindEx,使之与TCPChannel的其他接口统一命名。 修改测试Demo,添加多发选项 修改DataType.h中的内存块大小定义 封装临界区类,信号量类 修改TCPListener接口类中的EnumSockets接口,添加pArg参数 Socket类添加ReUseAddr函数,用来设置端口重用 TCPSocket接口类添加GetListener接口用来获得链接管理对象 修改Demo实例中的TCP客户端部分,增加可更改客户端连接数 2.4 添加UDT支持 修改UDPChannel接口类,添加UDT支持接口函数 添加日志支持 添加接口类ILogger,用来实现对日志的输出 添加x64的编译环境 添加部分WARN级别的日志输出 添加C接口,方便非C++语言应用 UDT添加特性,关闭UDT时,给对端发送断线信息,通知对端断线 UDT提高效率,UDT句柄部分改用读写锁来控制,以提高效率 修改OnSend和OnSendTo的行为 修改过的BUG: 1. 数据发送时,如果数据大小正好是MAX_PACKET_SIZE个字节的话,数据发送不出去,在计算包大小时,边界值没处理好。 2. IOCPUnhandledException函数内部逻辑错误,没有关联到自己的异常处理函数中,导致即使调用成功,程序异常了,也无法写dump文件。 3. 修复IOCP UDP Release模式下不能正常运行的BUG。由于传递的输出参数使用了局部变量导致的问题 4. 修复UDT发送时,计算尾包大小错误 5. 修复UDT快速发送错误 6. 修改Queue关闭时,如果有线程正在等待信号,会导致线程死等

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧