c++ - 如何将 std::set 转换为 std::array?
问题描述
我有std::set,我需要将它转换为std::array。元素的顺序无关紧要。
相反的转换似乎很简单,因为我可以这样做:
std::array<T> array;
std::set<T> set(array.begin(), array.end());
但不幸的是 std::array 没有这样的构造函数,所以我不能这样做:
std::set<T> set;
std::array<T> array(set.begin(), set.end());
这种转换的正确方法是什么?
解决方案
正如上面评论中提到的,std::array
不适合这个,因为大小必须在编译时知道。 std::vector
是合适的替代品。
vector
这是从 a填充 a 的一种方法set
。将其转换为模板应该很简单。注意reserve
效率的使用:
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
int main()
{
std::set <int> s = { 1, 2, 3, 4, 5 };
std::vector <int> v;
v.reserve (s.size ());
std::copy (s.begin (), s.end (), std::back_inserter (v));
for (auto i : v)
std::cout << i << '\n';
}
推荐阅读
- python - 当我使用 jinja 模板发送电子邮件时,css 不起作用
- ansible - 在 Ansible Jinja 模板中,如何转义双引号内的单引号?
- spring - 为什么 Spring 会创建这个太长的唯一 ID 并导致 DDL 错误?
- javascript - React 在数组上创建自己的函数
- apache-spark - Spark SQL中缓存机制的区别
- python - 从python 3中的实例变量中获取参数
- windows - 在 Windows 上使用 gcc/clang 内置函数
- r - 如何处理杂乱的数据 - 变量未标记为缺失
- node.js - res.status 和 res.send 请求发生两次
- android - Xamarin Android:如何在回收站视图中更改选定行的颜色