我想初始化一个 const std::vector<int>
给定 std::vector<std::tuple<int, float>>
的构造函数初始化列表中的成员变量构造函数参数。该 vector 应包含所有第一个元组项。
是否有单行代码可以提取 std::vector<int>
包含来自 std::vector<std::tuple<int, float>>
的所有第一个元组条目?
最佳答案
使用 C++20 范围:
struct X
{
const std::vector<int> v;
template <std::ranges::range R>
requires std::convertible_to<std::ranges::range_value_t<R>, int>
X(R r)
: v{r.begin(), r.end()}
{}
X(const std::vector<std::tuple<int, float>>& vt)
: X{vt | std::ranges::views::elements<0>}
{}
};
使用范围-v3:
struct X
{
const std::vector<int> v;
X(const std::vector<std::tuple<int, float>>& vt)
: v{vt | ranges::views::transform([] (auto t) {
return std::get<0>(t); })
| ranges::to<std::vector>()}
{}
};
还有科学怪人的怪物:
#include <ranges>
#include <range/v3/range/conversion.hpp>
struct X
{
const std::vector<int> v;
X(const std::vector<std::tuple<int, float>>& vt)
: v{vt | std::ranges::views::elements<0>
| ranges::to<std::vector>()}
{}
};
关于C++ 从 std::vector<std::tuple<int, float>> 获取 std::vector<int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69816375/