对于语句c ++,队列大小重置为0

问题描述 投票:-4回答:1

我现在不知道如何从vector_data向hpp_DE添加2个不同的数据。在第二次迭代(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消失。为什么会这样?

c++ for-loop struct queue size
1个回答
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不是空的副本,或只是将一个分配给另一个?

© www.soinside.com 2019 - 2024. All rights reserved.