std::transform
- это алгоритм, который применяет функцию к каждому элементу в диапазоне (или двум диапазонам) и сохраняет результат в другом диапазоне (также может быть равен любому входному диапазону).
std::vector<float> distances;
std::transform(play_->get_emps().begin(), play_->get_emps().end(),
std::back_inserter(distances),
[tank](const auto& e) {return math::distance(e.location(), tank->location();});
<algorithm>
это круто, но иногда это излишнее ИМО. for
l oop было бы еще проще:
std::vector<float> distances;
for(const auto& e: play_) {
distances.push_back(math::distance(e.location(), tank->location()));
}
Как отметил Март c Glisse в комментариях, обе версии выиграли бы от вызова std::vector::reserve
заранее. push_back
является довольно неэффективным при частом использовании (std::back_inserter
также использует push_back
для внутреннего использования)
std::vector<float> distances;
distances.reserve(play_.size());