Как установить максимальный размер для моего контейнера Deque с C ++? - PullRequest
0 голосов
/ 11 октября 2018

Мне нужна помощь в определении максимального размера моего контейнера STD типа Deque.

Документация Deque C ++

В этом случае мне придется хранить максимумколичество клиентов в данном дочернем элементе в структуре данных, как в примере ниже:

typedef struct Cart {
     int id;
     string clientName;
     int numberOfProducts;
     double purchaseValue;
} Cart;

Я определил константу:

#define MAX_CLIENT 10

И я собираюсь определить очереди,в котором должно быть не более 10 клиентов:

deque<Cart> BOX_1(MAX_CLIENT);
deque<Cart> BOX_2(MAX_CLIENT);
deque<Cart> BOX_3(MAX_CLIENT);

Но похоже, что структура все еще динамична, даже определяя максимальное число.

Спасибо за вклад.

1 Ответ

0 голосов
/ 11 октября 2018

Я собираюсь определить очереди, которые должны иметь максимум 10 клиентов:

deque<Cart> BOX_1(MAX_CLIENT);

Чтобы уточнить, это создает деку, которая содержит 10 тележек изначально .

Как установить максимальный размер для моего контейнера Deque с C ++?

std::deque не поддерживает такую ​​функцию.Невозможно установить максимальный размер для него.Не существует стандартного контейнера, поддерживающего такую ​​функцию (за исключением технически std::array, который имеет фиксированный размер).

Вы можете самостоятельно написать собственный контейнер, который поддерживает такую ​​функцию.Вы можете использовать стандартный контейнер в реализации своего пользовательского контейнера, если вы того пожелаете.Минимальный пример, который ни в коем случае не завершен и не полирован:

struct MaxContainer {
    void push_front(Cart c) {
        if (internal_container.size() < max_size)
            internal_container.push_front(std::move(c));
        else
            ; // do something else
    }
private:
    int max_size;
    std::deque<Cart> internal_container;
}

Вы можете даже создать адаптер контейнера, который может адаптировать любой контейнер (с ограничениями) и добавить к нему максимальный размер, просто храмовываятип внутреннего контейнера.


Тем не менее, вам не обязательно иметь контейнер, который обеспечивает ограничение размера.Вместо этого вы можете просто воздержаться от добавления дополнительных элементов в контейнер в коде, который его использует.

...