以下情況:我使用屬于以下類別的資料
std::vector<T> data1;
std::vector<std::vector<T>> data2;
std::vector<std::vector<std::vector<T>>> data3; //etc...
T 通常指的是數值資料,如double。有時我想以一種形式獲取資料,其中最后一個std::vector被std::span<T>指向相同資料的a 替換。
std::span<T> data1;
std::vector<std::span<T>> data2;
std::vector<std::vector<std::span<T>>> data3; //etc...
為每一層嵌套定義單獨的函式并不難,但我能否以某種方式定義一個可以為任何嵌套層自動執行此操作的函式?
uj5u.com熱心網友回復:
你可能會這樣做:
template <typename T, typename F>
auto transform(std::vector<T>& v, F func)
{
std::vector<std::decay_t<decltype(func(v[0]))>> res;
res.reserve(v.size());
std::transform(v.begin(), v.end(), std::back_inserter(res), func);
return res;
}
template <typename T>
std::span<T> to_span(std::vector<T>& v)
{
return v;
}
template <typename T>
auto to_span(std::vector<std::vector<T>>& v)
{
return transform(v, [](auto& inner){ return to_span(inner); });
}
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/397876.html
標籤:C
上一篇:C 如何“取消使用”庫參考?
