目前我正在创建一个这样的新集:
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)
好吧,诚然两行:)
您可以查看Boost.Assign,它允许您编写以下内容:
const std::list<int> primes = boost::assign::list_of(2)(3)(5)(7)(11);
Run Code Online (Sandbox Code Playgroud)
在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)
我们所有的担忧都被整齐地擦掉了.
如果您的初始数据位于某个std::some_container<A> a;具有开始和结束迭代器的容器中,并且这是前向迭代器或最佳迭代器(它们应该重载运算符++),那么您可以通过这种方式创建新集合。
std::set<A> s(a.begin(), a.end());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12942 次 |
| 最近记录: |