代码之家  ›  专栏  ›  技术社区  ›  a a

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

  •  0
  • a a  · 技术社区  · 3 年前

    也许是个愚蠢/天真的问题,但如果我有这样一个向量向量:

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

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

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

    有这样的功能吗?

    提前谢谢。

    1 回复  |  直到 3 年前
        1
  •  2
  •   selbie    3 年前

    可能会有一种使用 <algorithm> 或者是别致的累加器/变换程序。但很难打败这本书的可读性:

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