2012-04-16 74 views
0

所以,我班的一個具有以下過載:使用相同的迭代循環通過兩個標準::向量

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>構件稱爲vector),例如:

如果我有含有一個DVector一個vector構件包含下列浮子:11.0, 23.5, 12.3,並且然後將含有14.0, 6.5, 7.7另一個,兩者的總和應導致第一矢量保持25.0, 25.0, 25.0

問題:是否有任何方法可以循環遍歷兩個向量並且只使用一個迭代器求和它們的成員,假設向量的大小不是問題,或者我只是被迫使用了一個for (auto x: vector.size())

乾杯,朱利安。

回答

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

+0

無需任何不同爲'operator +'輸出迭代器,過載就像在'+ ='之間應用一樣簡單總和的兩個成員。感謝您的詳細解答。 – 2012-04-16 15:27:53

+0

好的,但是當你實現operator + =的時候,你只需要幾個步驟就可以讓一個正常的'+'只是試圖預測下一個可能的問題。 :) – 111111 2012-04-16 15:29:40

+0

實際上,我想知道是否有任何需要通過值傳遞?,如果傳遞的參數都不會傳遞,通過引用(和const)傳遞會不會更有效被修改? – 2012-04-16 15:32:38

2

迭代器綁定到容器,因此您不能使用單個迭代器。你將不得不使用一個或兩個獨立的迭代器。

1

如果我正確地瞭解您的需求:

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