鱼C论坛

 找回密码
 立即注册
查看: 3328|回复: 3

关于输出顺序问题

[复制链接]
发表于 2018-4-24 10:10:33 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 Sj中国智造 于 2018-4-24 10:13 编辑
  1. /*-----------------------------------------------
  2.             循环队列(C++实现代码)
  3. -------------------------------------------------*/

  4. #include <iostream>

  5. #define MAX_SIZE 1025
  6. #define YES 1
  7. #define NO -1
  8. #define OK 2
  9. #define ERROR -2
  10. using namespace std;

  11. template<class T>
  12. class CIRQUEUE
  13. {
  14. public:
  15.     CIRQUEUE();//申请一块内存
  16.     ~CIRQUEUE();//释放一块内存
  17.     int QueueIn(T data);//入队
  18.     T QueueOut();//出队

  19. private:
  20.     int front;//前指针
  21.     int rear;//尾指针
  22.     T *cirqueue;//指向分配的内存空间的首地址
  23. };

  24. //构造函数定义
  25. template<class T>
  26. CIRQUEUE<T>::CIRQUEUE()
  27. {
  28.     front = rear = 0;//初始化为0
  29.     this->cirqueue = new T[MAX_SIZE];//开辟数据为T的MAX_SIZE大小的内存空间
  30.     if (this->cirqueue == NULL)
  31.     {
  32.         cout <<"分配内存失败啦~~"<<endl;
  33.     }
  34. }

  35. //析构函数的定义
  36. template<class T>
  37. CIRQUEUE<T>::~CIRQUEUE()
  38. {
  39.     if (this->cirqueue!=NULL)
  40.     {
  41.         delete[] this->cirqueue;
  42.     }
  43. }

  44. //入队函数定义
  45. template<class T>
  46. int CIRQUEUE<T>::QueueIn(T data)
  47. {
  48.     if ((rear+1)%MAX_SIZE==front)
  49.     {
  50.         cout <<"对不起,队列已满!"<<endl;
  51.         return ERROR;
  52.     }
  53.     else
  54.     {
  55.         rear = (rear+1)%MAX_SIZE;
  56.         this->cirqueue[rear] = data;//入队
  57.         return OK;//成功
  58.     }
  59. }

  60. //出队函数定义
  61. template<class T>
  62. T CIRQUEUE<T>::QueueOut()
  63. {
  64.     if ((front+1)%MAX_SIZE>rear)
  65.     {
  66.         cout <<"队列已空!"<<endl;
  67.         exit(-1);//错误退出
  68.     }
  69.     else
  70.     {
  71.         T data = this->cirqueue[front+1];//出队
  72.         front = (front+1)%MAX_SIZE;
  73.         return data;
  74.     }
  75. }

  76. int main()
  77. {
  78.     CIRQUEUE<char> cirqu;

  79.     cirqu.QueueIn('a');
  80.     cirqu.QueueIn('b');
  81.     cirqu.QueueIn('c');
  82.     cout <<cirqu.QueueOut()<<cirqu.QueueOut()<<cirqu.QueueOut()<<endl;

  83.     return 0;
  84. }
复制代码
为什么我只是把代码合起来输出,两个结果会不一样?详细见图

013.jpg
014.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-4-24 22:26:17 | 显示全部楼层
解决了,原来cout的输出顺序有如下规律:
计算顺序:自右至左
输出顺序:自左至右
这就解释通了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-25 21:41:20 | 显示全部楼层
Sj中国智造 发表于 2018-4-24 22:26
解决了,原来cout的输出顺序有如下规律:
计算顺序:自右至左
输出顺序:自左至右

其实不同的编译器计算的顺序是不同的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-27 19:11:13 | 显示全部楼层
Sj中国智造 发表于 2018-4-24 22:26
解决了,原来cout的输出顺序有如下规律:
计算顺序:自右至左
输出顺序:自左至右

楼主你的问题解决了  你的20鱼币怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 05:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表