class SomeType { int32_t variable; }
std::vector<SomeType> myVector(10);
// ... code to work with myVector
std::vector<int32_t> myOtherVector;
for(int i = 0; i < myVector.size(); i++)
{
myOtherVector.push_back(myVector[i].variable);
}
有更好的方法吗?我已经看过如何使用lambda进行复杂的初始化,但是我无法弄清楚如何将这个新的向量中的Type的某些字段“映射”(用C#术语)。
答案 0 :(得分:4)
它不会初始化,但您可以使用std::transform
:
myOtherVector.resize(myVector.size());
std::transform(myVector.cbegin(), myVector.cend(), myOtherVector.begin(),
[](auto const& s){
return s.variable;
});
myOtherVector.reserve(myVector.size()); // optional
std::transform(myVector.cbegin(), myVector.cend(), std::back_inserter(myOtherVector),
[](auto const& s){
return s.variable;
});
您可以使用Boost的transform_iterator
初始化:
auto tr = [](auto const& s){
return s.variable;
});
vector<int32_t> myOtherVector(
boost::make_transform_iterator(myVector.begin(), tr),
boost::make_transform_iterator(myVector.end(), tr)
);
答案 1 :(得分:0)
我好一点(恕我直言)
for ( auto const & elem : myVector )
{
myOtherVector.emplace_back(elem.variable);
}