gpt4 book ai didi

c++ - 使用 vector 中的元素初始化 vector (映射函数?)

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:17 24 4
gpt4 key购买 nike

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# 术语)到这个新 vector 上。

最佳答案

它不会初始化,但你可以使用 std::transform :

myOtherVector.resize(myVector.size());
std::transform(myVector.cbegin(), myVector.cend(), myOtherVector.begin(),
[](auto const& s){
return s.variable;
});

或使用 back_inserter :

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)
);

关于c++ - 使用 vector<SuperSetofT> 中的元素初始化 vector<T> (映射函数?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39988863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com