【问题标题】:error: no matching constructor for initialization of 'set<int>'错误:'set<int>' 的初始化没有匹配的构造函数
【发布时间】:2017-05-26 13:16:14
【问题描述】:

在 C++ 中,我包含了 set 库:

#include <set>

我想创建一个元素数量与另一个集合相同的集合。所以,我尝试了这个:

set<int> ret((int)ring.size());

但是,我收到此错误:

error: no matching constructor for initialization of 'set<int>'

知道如何从声明中指定集合的​​大小吗?

【问题讨论】:

  • 一个 std::set 是一个有序的容器,通常用树来实现。想想吧。
  • 集合中应该包含哪些值?它不能像vector(size_t) 那样将它们全部初始化为零,因为这只会导致一个元素集。

标签: c++ constructor stl set size


【解决方案1】:

知道如何从声明中指定集合的​​大小吗?

你会

您可以将旧集合复制到新集合,从而填充集合,从而使其大小相应增加,或者向其插入 唯一 值,直到它达到所需大小.

您可以随时查看ref 中可用的构造函数。


想一想:假设存在一个像你描述的那样的构造函数。它必须默认初始化集合的值。但这意味着所有值都是相同的。这应该会产生一个大小为 1 的集合。

【讨论】:

    【解决方案2】:

    这并不完全合乎逻辑。您不会像为其他容器类型所做的那样为 set 中的元素保留存储空间,例如vector。此外,set 中的所有元素都必须是不同的,因此您不能将元素设置为相同的值。

    set 中的元素数量仅由集合中的元素决定。如果你想要一个集合与另一个集合具有相同数量的元素,那么你也可以使用 复制构造函数

    【讨论】:

    • 我宁愿说“你不会像使用其他容器那样调整集合的大小”。在某些情况下为集合保留大小可能是有意义的(即使std::set 没有reserve)。另一方面,调整集合的大小(更大的大小)从来没有意义。
    【解决方案3】:

    std::set 旨在存储独特的元素

    如果:

    set<int> ret((int)ring.size());
    

    可能会隐含地假设您要创建一个存储非唯一元素的容器。因此这是不可能的(这就是 std::multiset 的用途)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2017-06-27
      相关资源
      最近更新 更多