如何使用C ++为我的容器Deque设置最大大小?

时间:2018-10-11 14:14:35

标签: c++ c++11 data-structures

我需要帮助定义Deque类型的STD容器的最大尺寸。

Deque Documentation 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 :(得分:4)

  

我要定义队列,该队列最多必须有10个客户端:

deque<Cart> BOX_1(MAX_CLIENT);

为澄清起见,此操作会创建一个初始包含10个购物车的双端队列。

  

如何使用C ++为我的容器Deque设置最大大小?

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;
}

您甚至可以创建一个容器适配器,该容器适配器可以(有限制)适应任何容器,并只需对内部容器类型进行模板化即可为其添加最大大小。


也就是说,您不一定需要具有用于强制大小限制的容器。相反,您可以简单地避免在使用容器的代码中向容器中添加更多元素。