在C++中,我已經包括了set
庫:錯誤:沒有匹配的構造函數的初始化「設置<int>」
#include <set>
我想創建一組與等於的另一多個元件組。所以,我嘗試這樣做:
set<int> ret((int)ring.size());
不過,我得到這個錯誤:
error: no matching constructor for initialization of 'set<int>'
任何想法,我怎麼可以指定一組從聲明的大小?
在C++中,我已經包括了set
庫:錯誤:沒有匹配的構造函數的初始化「設置<int>」
#include <set>
我想創建一組與等於的另一多個元件組。所以,我嘗試這樣做:
set<int> ret((int)ring.size());
不過,我得到這個錯誤:
error: no matching constructor for initialization of 'set<int>'
任何想法,我怎麼可以指定一組從聲明的大小?
Any idea how can I specify the size of the set from its declaration?
你做不是。
你要麼你的老集複製到新的一個,從而填充集,這將導致其規模相應增加,或插入獨特值給它,直到它達到所需的大小。
您可以隨時查看ref中的構造函數。
想想:假設像你描述存在一個構造函數。它必須默認初始化該組的值。但是這意味着所有的價值都是一樣的。這應該會導致一個大小爲1的集合。
這並不完全合乎邏輯。與其他容器類型不同,您不需要爲set
中的元素預留存儲空間。 vector
。此外set
中的所有元素必須是不同的,因此您不能將元素設置爲相同的值。
set
中的元素數量僅由該集合中的元素驅動。如果你想要一組與另一組相同數量的元素,那麼你可以使用複製構造函數。
我寧願說「你不用調整其他容器的大小」。在某些情況下(即使'std :: set'沒有'reserve'),保留一個集合的大小也是有意義的)。另一方面調整集合(更大的尺寸)從來沒有道理。 – user463035818
std::set
被設計成商店獨特元素。
如果:
set<int> ret((int)ring.size());
本來可能會隱含假設你想創建一個容器存儲非獨特的元素。因此這是不可能的(這就是std::multiset
用於)。
std :: set是通常用樹實現的有序容器。想想看。 – DeiDei
該集合中應該包含哪些值?它不能像'vector(size_t)'那樣將它們初始化爲零,因爲這隻會導致一個元素集合。 – aschepler