Размер очереди сбрасывается в 0 для оператора c ++ - PullRequest
0 голосов
/ 15 февраля 2019

Не знаю, как добавить 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.Почему это происходит?

1 Ответ

0 голосов
/ 15 февраля 2019

in

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 не пусто, чтобы сделатьскопировать или просто присвоить одно другому?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...