迭代一个向量并基于元素创建另一个向量

Iterate over a vector and create another vector based on elements

可能是一个 stupid/naive 问题,但是如果我有这样一个向量的向量:

std::vector<std::vector<Element> vec

从这个向量创建另一个向量的最有效方法是什么,该向量包含前一个向量中所有元素的大小:

std::vector<std::size_t> newVector = {vec[0].size(), ..., vec[vec.size()-1].size()}

有这样的功能吗?

提前致谢。

可能有一种使用 <algorithm> 或奇特的 accumlator/transform 例程的方法的单行方法。但它的可读性是无与伦比的:

std::vector<std::size_t> newVector;
for (const auto& item : vec) {
    newVector.push_back(item.size());
}

如果您更喜欢时髦的方式,有些人喜欢这种方式,但在我看来,这会导致代码难以阅读。

vector<int> newVec(vec.size());
std::transform(vec.begin(), vec.end(), newVec.begin(), [](vector<int>& v) {return v.size(); });