【问题标题】:Size of queue is reset to 0 in for statement c++对于语句c ++,队列的大小重置为0
【发布时间】:2019-02-15 08:11:29
【问题描述】:

我现在不知道如何将 2 个不同的数据从 vector_data 添加到 hpp_DE。在第二次迭代(i = 1)中,hpp_DE 的大小重置为 0。

struct Instr;
queue <struct> hpp_DE;
queue <struct> vector_data;  
//size of vector is 2;
for (int i = 0; i <= vector_data.size(); i++) {
                    Instr = vector_date.front();
                    vector_data.pop();
                    hpp_DE.push(Instr); 
 }

它应该在队列 hpp_DE 中添加两个值,但我只得到一个值;第二个被添加。 vector_data 的第一个值从 hpp_DE 中消失了。为什么会这样?

【问题讨论】:

  • 更改您的代码使其实际编译后,它对我来说可以正常工作(只要vector_data 包含不超过 2 个元素,否则它不能正常工作,如 bruno 所述)
  • 您的代码 sn-p 适用于 tio

标签: c++ for-loop struct queue size


【解决方案1】:

for (int i = 0; i <= vector_data.size(); i++) {
                    Instr = vector_date.front();
                    vector_data.pop();
                    hpp_DE.push(Instr); 
 }

vector_data 的大小因 pop 而发生变化,同时您增加 i 以将其与(修改后的)大小进行比较,如果你想复制所有元素。

你用 struct 作为类型,奇怪

vector_date 必须是vector_data

这样:

int main()
{
  queue <int> hpp_DE;
  queue <int> vector_data;  

  vector_data.push(1);
  vector_data.push(2);

  for (int i = 0; i <= vector_data.size(); i++) {
    int v = vector_data.front();
    vector_data.pop();
    hpp_DE.push(v); 
  }

  cout << hpp_DE.size() << ':';

  while (!hpp_DE.empty()) {
    cout << ' ' << hpp_DE.front();
    hpp_DE.pop();
  }
  cout <<endl;
}

编译和执行:

/tmp % g++ -pedantic -Wextra v.cc
v.cc: In function 'int main()':
v.cc:13: warning: comparison between signed and unsigned integer expressions
/tmp % ./a.out
2: 1 2

(使用size_t而不是int作为索引来删除警告)

但是有

#include <queue>
#include <iostream>
using namespace std;

int main()
{
  queue <int> hpp_DE;
  queue <int> vector_data;  

  vector_data.push(1);
  vector_data.push(2);
  vector_data.push(3);
  vector_data.push(4);
  vector_data.push(5);

  for (int i = 0; i <= vector_data.size(); i++) {
    int v = vector_data.front();
    vector_data.pop();
    hpp_DE.push(v); 
  }

  cout << hpp_DE.size() << ':';

  while (!hpp_DE.empty()) {
    cout << ' ' << hpp_DE.front();
    hpp_DE.pop();
   }
   cout <<endl;
}

打印3: 1 2 3

如果它复制所有的目标只是循环,而vector_data 不为空来进行复制,或者只是将一个分配给另一个?

【讨论】:

  • 不,不是。因为 1
  • @Flavinia 你给出的代码不能是你执行的代码,不可能编译,这可能解释了行为差异
  • @Flavinia 我编辑了我的答案以提供执行示例
猜你喜欢
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
  • 2011-10-03
  • 1970-01-01
  • 2017-06-07
  • 2015-05-26
相关资源
最近更新 更多