![](/img/trans.png)
[英]Assign std::vector<std::unique_ptr<T>> to another std::vector<std::unique_ptr<T>>
[英]Can I pass a std::vector<std::unique_ptr<T>> as a vector of raw pointer without extra allocations?
假设我有以下 function:
void sum(const std::vector<int*>& input) {
return ... ; // the sum
}
我在某处存储了一个 int 指针向量
...
std::vector<std::unique_ptr<int>> my_ints;
有没有办法将my_ints
传递给sum()
而无需任何额外分配,例如将 unique_ptrs 的中间向量转换为原始指针向量?
显然,我可以重构sum()
来取一个唯一 ptrs 的向量。 或者超载。 但我希望找到一种我不必这样做的方法,让用户决定是否使用 unique_ptrs 向量或原始指针。
不像你想要的那样,但你应该以不同的方式考虑sum()
。 它看起来像一个在范围内运行的算法,所以你应该让它更像这样:
template <typename It>
ValueType sum(It begin, It end) {
// ... iterate and calculate sum
return sum;
}
然后突然之间,您可以开始使用范围来做很酷的事情了!
std::vector<std::unique_ptr<int>> my_ints;
auto range = my_ints | ranges::views::transform
(
[](auto smart_ptr) {
return smart_ptr.get();
}
);
这是一个会随着您的使用而变化的范围! 然后你可以像这样将它输入到你的sum()
中:
auto my_sum = sum(std::begin(range), std::end(range));
还要查找std::accumulate()
,我会说,它在这里做你想要的。
不,绝对没有办法在不更改方法的情况下将这些指针值传递给该sum
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.