错误:没有用于初始化&#39; set <int>&#39;的匹配构造函数

时间:2017-05-26 13:16:15

标签: c++ constructor stl set size

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

#include <set>

我想创建一个具有与另一个元素相同的元素的集合。所以,我试过这个:

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

但是,我收到此错误:

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

任何想法如何从声明中指定集合的​​大小?

3 个答案:

答案 0 :(得分:5)

  

任何想法如何从声明中指定集合的​​大小?

你做

您要么将旧集合复制到新集合,从而填充集合,这会导致其大小相应增加,或者向其插入唯一值,直到达到所需大小

您始终可以查看ref中可用的构造函数。

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

答案 1 :(得分:1)

这不完全符合逻辑。您不为set中的元素保留存储空间,就像对其他容器类型一样,例如vector。此外,set中的所有元素必须是不同的,因此您无法将元素设置为相同的值。

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

答案 2 :(得分:0)

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

如果那样:

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

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