【问题标题】:How to set a maximum size for my container Deque with C ++?如何使用 C++ 为我的容器 Deque 设置最大大小?
【发布时间】:2018-10-11 14:14:34
【问题描述】:

我需要帮助定义我的 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);

但似乎结构仍然是动态的,甚至定义了最大数量。

感谢您的贡献。

【问题讨论】:

  • 不要用 C 标签来标记纯 C++ 问题。
  • 那么如果有人错误地添加了 11 个条目,你希望发生什么?
  • 您可以使用 MAX_CLIENT 大小的 std::array 并保持插入的元素数量
  • 标准容器没有这样的功能,但是if (BOX_1.size() == max_size) { /*dont insert element*/} else { /*insert element*/} 有什么问题?
  • 为什么你觉得dequeue应该有一个小的最大尺寸?该文档有max_size,但这是用于记录不切实际的内存耗尽场景=(总内存-开销)/(元素大小+开销)。

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


【解决方案1】:

我即将定义队列,它必须有最多 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;
}

您甚至可以创建一个容器适配器,它可以适应任何容器(有限制)并通过简单地对内部容器类型进行模板化来为其添加最大大小。


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

【讨论】:

  • 我本来想那样做的……但这是时间表上的一个补丁。我很感激,我会以同样的方式发展。
  • 注意:当队列模板类型为数字时(例如char),在使用花括号初始化创建队列时,您将收到“缩小转换”编译错误:它尝试使用initializer_list 构造函数而不是 size_type 一个。看来您必须使用括号(即(deque(MAX_CLIENT) 而不是 deque{MAX_CLIENT})。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 2015-04-10
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
相关资源
最近更新 更多