使用相同的迭代器循环遍历两个 std::vector

Looping through two std::vectors using the same iterator

本文关键字:std vector 两个 遍历 循环 迭代器      更新时间:2023-10-16

因此,我的一个类具有以下重载:

DVector &operator+=(DVector const &other) {
    if (vector.size() >= other.vector.size()) throw up; // lol.
    std::for_each(other.vector.begin(); other.vector.end(), [](DVector const &pass) {
        // huh?
    });
}

因此,这个想法是将两个向量的每个成员求和(嗯,每个DVector实例都包含一个名为 vectorstd::vector<float>成员),例如:

如果我有一个包含vector成员的DVector包含以下浮点数:11.0, 23.5, 12.3,然后另一个包含14.0, 6.5, 7.7,则两者的总和应导致第一个向量保持25.0, 25.0, 25.0

问题

:有没有办法遍历两个向量并仅使用一个迭代器对它们的成员求和,假设向量的大小不是问题,还是我只是被迫使用for (auto x: vector.size())

干杯,朱利安。

这是一个 std::transfom 算法,它接受两个输入和一个输出迭代器。

我不知道您的特定矢量设计是如何构建的,但您应该能够根据需要修改以下内容。

 std::transform(input1.begin(), input1.end(),  //input1
                intput2.begin(),               //input2
                input1.begin(),                //output 
     [](double a, double b){
          return a+b;
     });

您还可以使用不同的输出迭代器operator +也可以很好地使用。

以下是一些参考资料

http://en.cppreference.com/w/cpp/algorithm/transform

http://www.cplusplus.com/reference/algorithm/transform/

当你有不同的输出时,back_inserter是你的朋友:

http://en.cppreference.com/w/cpp/iterator/back_inserter

迭代器绑定到容器,因此不能使用单个迭代器。您必须使用一个索引或两个单独的迭代器。

如果我

正确理解您的需求:

std::transform(vec1.begin(), vec1.end(), vec2.begin(), vec1.begin(),
    [](float lhs, float rhs) {
        return lhs + rhs;
    });