C++ C++;从另一个向量中对象的属性创建向量

C++ C++;从另一个向量中对象的属性创建向量,c++,std,stdvector,C++,Std,Stdvector,假设我有一个类a和一个实例向量instances A类{ 公众: INTA; } std::向量实例;//包含多个对象 现在我想从a中对象的属性a创建int的向量 天真的做法是 std::向量属性; 用于(自动和对象:实例){ 属性。推回(obj.a); } 有没有一种方法可以在一行中完成?在概念上接近python的东西 attributes=[obj.a用于实例中的obj] 使用 std::向量属性; attributes.reserve(instances.size()); std::t

假设我有一个类
a
和一个实例向量
instances

A类{
公众:
INTA;
}
std::向量实例;//包含多个对象
现在我想从
a
中对象的属性
a
创建
int
的向量

天真的做法是

std::向量属性;
用于(自动和对象:实例){
属性。推回(obj.a);
}
有没有一种方法可以在一行中完成?在概念上接近python的东西

attributes=[obj.a用于实例中的obj]
使用

std::向量属性;
attributes.reserve(instances.size());
std::transform(instances.begin()、instances.end()、std::back_插入器(属性),
[](自动和对象){return obj.a;});
使用

std::向量属性;
attributes.reserve(instances.size());
std::transform(instances.begin()、instances.end()、std::back_插入器(属性),
[](自动和对象){return obj.a;});

标准::向量属性;std::transform(instances.cbegin()、instances.cend()、std::back_插入器(属性),[](auto const&e){return e.a;})std::ranges::transform(实例、std::back\u inserter(属性)和&A::A)
使用投影参数,应该比旧方法更有效、更简洁。
std::vector attributes;std::transform(instances.cbegin()、instances.cend()、std::back_插入器(属性),[](auto const&e){return e.a;})使用C++20,
std::ranges::transform(实例、std::back\u inserter(属性)和&A::A)
使用投影参数应该可以工作,并且比旧方法简洁得多,虽然预先调整
属性的大小并将
插入器放回@463035818\u is\u not\u更有效,但是预先调整数字大小会将所有元素初始化为
0
,这可能会更慢,使用
reserve
并保留
back\u inserter
可能会更容易performant@AlanBirtles哦,对了。这个问题结束后,我就不用发布糟糕的答案了;)fwiw,这相当于OPs循环,尽管预先调整
属性
的大小并将
插入器
@463035818\u不是\u一个\u数字的大小会将所有元素初始化为
0
,这可能会更慢,使用
reserve
并保留
back\u inserter
可能会更容易performant@AlanBirtles哦,对了。这个问题结束后,我就不用发布糟糕的答案了;)
std::vector<...> attributes;
attributes.reserve(instances.size());
std::transform(instances.begin(), instances.end(), std::back_inserter(attributes),
               [](auto&& obj) { return obj.a; });