有没有快速创建集合的方法?

Ami*_*hum 8 c++ stl set

目前我正在创建一个这样的新集:

    std::set<A> s;
    s.insert(a1);
    s.insert(a2);
    s.insert(a3);
    ...
    s.insert(a10);
Run Code Online (Sandbox Code Playgroud)

有没有办法s在一行中创建?

Moo*_*ice 17

int myints[]= {10,20,30,40,50};
std::set<int> mySet(myints, myints + 5);
Run Code Online (Sandbox Code Playgroud)

好吧,诚然两行:)


ice*_*ime 8

您可以查看Boost.Assign,它允许您编写以下内容:

const std::list<int> primes = boost::assign::list_of(2)(3)(5)(7)(11);
Run Code Online (Sandbox Code Playgroud)


Mat*_* M. 6

在C++ 0x中,标准将初始化列表定义为对这种(笨拙)构造的改进.

现在更容易:

std::set<int> set = {10, 20, 30, 40, 50};
Run Code Online (Sandbox Code Playgroud)

所需要的只是标准库为set声明以下构造函数:

template <typename Value, typename Compare, typename Allocator>
set<Value, Compare, Allocator>::set(std::initializer_list<Value> list);
Run Code Online (Sandbox Code Playgroud)

我们所有的担忧都被整齐地擦掉了.

  • @克劳迪乌:是的,集合构造函数是由集合提供的(不是由用户提供的),这里提到它只是为了暴露(暴露正在使用的功能)。 (2认同)

Mih*_*yan 5

如果您的初始数据位于某个std::some_container<A> a;具有开始和结束迭代器的容器中,并且这是前向迭代器或最佳迭代器(它们应该重载运算符++),那么您可以通过这种方式创建新集合。

std::set<A> s(a.begin(), a.end());
Run Code Online (Sandbox Code Playgroud)