2012-04-16 1 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라고 :

I 하나 DVector 다음 플로트 함유 vector 부재를 함유 한 경우 11.0, 23.5, 12.3을하고 14.0, 6.5, 7.7를 함유하는 또 하나는, 양자의 합계가 제 1 벡터가 01,234 지주로 연결되어야.

질문 : 벡터의 크기가 문제가 아닌 것으로 가정하면 두 벡터를 반복하고 그 구성원을 합계하는 방법이 있습니까? 아니면 그냥 for (auto x: vector.size())을 사용해야합니까?

건배, 줄리안.

답변

2

는 두 개의 입력과 출력 반복자에 걸릴 표준 : 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/iterator/back_inserter

+0

어떤 다른 필요가 없습니다 : 여기

는 일부 참조

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

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

그리고 당신은 다른 출력을 할 때 back_inserter 당신의 친구입니다입니다 'operator +'에 대한 반복자 출력을 사용하면 오버로드는 사이에'+ ='를 적용하는 것처럼 간단합니다 합계의 두 멤버. 자세한 답변을 주셔서 감사합니다. –

+0

좋아,하지만 종종 연산자 + =를 구현할 때 당신은 단지 정상적인'+'을 갖는 두 단계만으로도 다음에 발생할 가능성이있는 질문을 예측하려고 시도했을뿐입니다. :) – 111111

+0

실제로 전달 값을 수행 할 필요가 있는지 궁금하네요. 전달 된 인수가 둘 다 가정하지 않으면 전달 참조 (및 const)를 수행하는 것이 더 효과적이지 않을까요? 수정 되나요? –

2

반복기는 컨테이너에 묶여 있으므로 하나의 반복기를 사용할 수 없습니다. 인덱스 또는 두 개의 개별 반복자를 사용해야합니다.

1

내가 제대로 당신의 요구를 이해하고있어 경우

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