Невозможно реализовать очередь <pair <int, int *>> в C ++ - PullRequest
0 голосов
/ 05 января 2019

Проблема:

Я пытаюсь реализовать буфер со структурой queue <pair<int, int*> >. В следующем коде я пытаюсь отправить 100 записей в очередь буфера. После этого я пытаюсь снова извлечь записи из буфера по очереди:

#include <bits/stdc++.h>

using namespace std;

int main() {
    typedef int TWO_INT_ARR[2];
    typedef pair<int,int*> data_record;

    queue<data_record>* _buffer = new queue<data_record>();

    for(int i=0; i<100; ++i) {
        TWO_INT_ARR _two_int_arr;

        _two_int_arr[0] = i;
        _two_int_arr[1] = i;

        data_record     _data_record;

        _data_record.first = i;
        _data_record.second = _two_int_arr;

        _buffer->push(_data_record);
    }

    while(! _buffer->empty()) {
        data_record front_record = _buffer->front();

        cout << front_record.first << "\t"
                << front_record.second[0] << "\t"
                << front_record.second[1] << endl;

        _buffer->pop();
    }

    return 0;
}

Ожидаемый результат:

0    0    0
1    1    1
2    2    2
:    :    :
99   99   99

Фактический объем производства:

0    99   99
1    99   99
2    99   99
:    :    :
99   99   99

Может ли кто-нибудь помочь мне найти ошибку в моем коде?

1 Ответ

0 голосов
/ 05 января 2019

У вас большая проблема с управлением памятью.

Во-первых, не используйте массив данных в стиле C для ваших данных, используйте std::array. Тогда не используйте bits/stdc++.h:

typedef std::array<int, 2> TWO_INT_ARR;
typedef std::pair<int, TWO_INT_ARR > data_record;

std::queue<data_record>* _buffer = new std::queue<data_record>();

И это все.

Также согласен с @Fureeish. Если это минимальный пример, то вы могли бы просто использовать:

std::queue<data_record> _buffer;

для этого примера.

...