将 std:set<int32_t> 复制到 std::set <uint32_t>的好方法

Good way to copy a std:set<int32_t> to a std::set<uint32_t>

本文关键字:gt lt std set 方法 uint32 复制 int32      更新时间:2023-10-16

在uint32_t和int32_t之间有一个隐式转换可用。 我有点惊讶地发现我不能说:

void somefunc(std::set<uint32_t> arg);
std::set<int32_t> ary1;
somefunc(ary1);

这是为什么呢?是否有一种简短而甜美的语法来做到这一点,而无需写出 for 循环将第一个int32_t数组复制到临时uint32_t数组中?

谢谢。

标准容器通常可以使用其他容器的范围来构造,由迭代器对指定。考虑以下示例:

#include <cstdint>
#include <set>
void foo(std::set<uint32_t> arg) {}
int main()
{
std::set<int32_t> x;
foo({ x.begin(), x.end() });
}

foo期待std::set<uint32_t>xstd::set<int32_t>{x.begin(), x.begin()}正在创建一个新的临时std::set<uint32_t>,该从x复制所有值。它类似于您可能在旧代码中找到的std::set<uint32_t>(x.begin(), x.end())。这也适用于不同类型的容器,前提是包含的元素是兼容的。