迭代一个向量并基于元素创建另一个向量
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(); });
可能是一个 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(); });