使用现代C+从另一个向量的成员初始化std::向量+; 在现代C++中,从另一个向量的成员中初始化向量有更好的方法吗?例如,使用lambdas #include <array> #include <cstdint> #include <vector> struct IntRectangle { uint64_t id; std::array<uint64_t, 2> width_height; }; std::vector<std::array<uint64_t, 2>> rect2array(const std::vector<IntRectangle>& rects) { std::vector<std::array<uint64_t, 2>> rect_array; rect_array.reserve(rects.size()); for (const auto& rect : rects) { rect_array.push_back(std::array<uint64_t, 2>{ rect.width_height }); } return rect_array; } #包括 #包括 #包括 结构IntRectangle{ uint64_t id; std::阵列宽度×高度; }; std::vector rect2array(const std::vector&rects){ std::矢量矩形阵列; rect_array.reserve(rects.size()); 用于(常数自动和矩形:矩形){ rect_array.push_back(std::array{rect.width_height}); } 返回rect_数组; }

使用现代C+从另一个向量的成员初始化std::向量+; 在现代C++中,从另一个向量的成员中初始化向量有更好的方法吗?例如,使用lambdas #include <array> #include <cstdint> #include <vector> struct IntRectangle { uint64_t id; std::array<uint64_t, 2> width_height; }; std::vector<std::array<uint64_t, 2>> rect2array(const std::vector<IntRectangle>& rects) { std::vector<std::array<uint64_t, 2>> rect_array; rect_array.reserve(rects.size()); for (const auto& rect : rects) { rect_array.push_back(std::array<uint64_t, 2>{ rect.width_height }); } return rect_array; } #包括 #包括 #包括 结构IntRectangle{ uint64_t id; std::阵列宽度×高度; }; std::vector rect2array(const std::vector&rects){ std::矢量矩形阵列; rect_array.reserve(rects.size()); 用于(常数自动和矩形:矩形){ rect_array.push_back(std::array{rect.width_height}); } 返回rect_数组; },c++,C++,这对你有用吗?我想你需要转换 std::vector rect2array(const std::vector&rects){ std::矢量矩形阵列; rect_array.reserve(rects.size()); std::transform(std::begin(rects)、std::end(rects)、std::back_插入器(rect_数组),[](const auto&ir){ 返回红外宽度与高度; }); 返回rect_数组; } 我认为没有必要复制width\u h

这对你有用吗?

我想你需要
转换

std::vector rect2array(const std::vector&rects){
std::矢量矩形阵列;
rect_array.reserve(rects.size());
std::transform(std::begin(rects)、std::end(rects)、std::back_插入器(rect_数组),[](const auto&ir){
返回红外宽度与高度;
});
返回rect_数组;
}


我认为没有必要复制
width\u height
当数组的大小较大且参数的生命周期足够长时,那么我们可以返回一个
std::vector

为什么不简单地使用
std::copy()
?似乎您想要将一种向量转换为另一种向量。如果你不想复制数据,只想“引用”它,你可以使用范围和
transform\u视图
()@Zoso那么问题中的For-range循环和答案中的std::transform有什么区别呢?很多
std:
限定是不必要的
std::begin(rects)
可以是
begin(rects)
,因为
rects
std::vector
,所以依赖于参数的查找开始了。您还可以通过将返回类型声明为
auto
@MSalters来减少冗长。谢谢您的建议。谢谢@prehistoricpenguin,这是一种很好的编写方法。由于我的问题被(正确地)标记为与另一个问题相似,我的回答有点延迟。
rect_array.reserve(rects.size());    
std::transform(rects.cbegin(), rects.cend(), std::back_inserter(rect_array), [](const auto& rect) {
    return rect.width_height;
});