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

时间:2012-04-16 15:17:27

标签: c++ vector

所以,我的一个类有以下重载:

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实例包含一个名为std::vector<float>的{​​{1}}成员,例如:

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

问题:是否有任何方法可以循环遍历两个向量并仅使用一个迭代器对其成员求和,假设向量的大小不是问题,或者我只是被迫使用25.0, 25.0, 25.0

干杯,朱利安。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

是一个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

答案 2 :(得分:1)

如果我正确理解你的需求:

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