C++ 创建向量长度向量的写入算法

C++ 创建向量长度向量的写入算法,c++,stl,C++,Stl,我有一个整数向量的向量。每个第二层向量可以具有不同的长度。我想创建一个整数向量,其中每个值是相应向量的长度除以一个常数 例如: std::vector<int> a = { 1, 2, 3 }; std::vector<int> b = { 1, 2, 3, 4 }; const int kDivisor = 10; std::vector<std::vector<int>> collection; collection.push_back(a);

我有一个整数向量的向量。每个第二层向量可以具有不同的长度。我想创建一个整数向量,其中每个值是相应向量的长度除以一个常数

例如:

std::vector<int> a = { 1, 2, 3 };
std::vector<int> b = { 1, 2, 3, 4 };
const int kDivisor = 10;
std::vector<std::vector<int>> collection;
collection.push_back(a);
collection.push_back(b);
std::vector<double> scaled_lengths;

for (auto v : collection) {
    scaled_lengths.push_back(static_cast<double>(v.size()) / kDivisor);
}
std::vector a={1,2,3};
向量b={1,2,3,4};
常数int kDivisor=10;
病媒采集;
收集。推回(a);
收集。推回(b);
std::矢量缩放长度;
用于(自动v:收集){
缩放长度。向后推(静态投射(v.size())/kDivisor);
}
所需的输出为缩放长度=[.3、.4]

我可以使用STL算法来获得这个输出吗


谢谢

它并不简单,但也许你想让它成为更大东西的基础

    scaled_lengths.resize(collection.size());
    std::transform(collection.begin(), collection.end(), scaled_lengths.begin(),
                   [=](auto &v) { return static_cast<double>(v.size())/kDivisor; });
scaled_length.resize(collection.size());
std::transform(collection.begin()、collection.end()、scaled_length.begin(),
[=](auto&v){return static_cast(v.size())/kDivisor;});

您可以(使用
std::transform
),但是对于这样一个简单、专门的任务,您的for循环将更加清晰。我想不出比您拥有的更简单的东西了,请重新考虑“STL”标记,它指的是一个过时的(但仍然具有间接影响)库。在添加标签之前,请确保阅读标签说明@BenjaminLindley,我正在学习C++的STL算法。我曾读到,使用算法总是比编写循环更可取。我同意转换解决方案看起来更复杂,您认为它有价值吗?因为它显示了意图/性能/最小化了在循环中写入错误的机会?