2014-05-14 1 views
2
vector<int> vecIntsA{1, 2, 3, 4}; 
vector<int> vecIntsB{5, 6, 7, 8}; 
vector<int> vecIntsC(vecIntsA.size(), 0); 

for(vector<int>::size_type i = 0; i < vecIntsA.size(); ++i) 
{ 
    vecIntsC[i] = vecIntsA[i] + vecIntsB[i]; 
} 

질문>이 계산을 한 줄로 처리하는 데 사용할 수있는 STL 알고리즘이 있습니까?두 벡터에서 연산하고 결과를 다른 벡터에 저장하는 방법

+3

것은'조회 표준 : transform' – Brian

답변

5
#include <algorithm> 
#include <functional> 
#include <vector> 

std::vector<int> vecIntsA{1, 2, 3, 4}; 
std::vector<int> vecIntsB{5, 6, 7, 8}; 
std::vector<int> vecIntsC(vecIntsA.size(), 0) 

std::transform(vecIntsA.begin(), vecIntsA.end(), 
       vecIntsB.begin(), vecIntsC.begin(), op); 
영업 이익은 이항 연산, std::plus<int>() 또는 같은 사용자 정의 요약 함수이다

: C++ (14)

int sumInt(const int& a, const int& b) 
{ 
    return a + b; 
} 

, 당신은 심지어 유형의 명시 적 언급을 삭제하고 단지 std::plus<>() 사용할 수 있습니다

std::transform(vecIntsA.begin(), vecIntsA.end(), 
       vecIntsB.begin(), vecIntsC.begin(), std::plus<>()); 
+0

는'op'도'수 표준 수 : 플러스 {}'. – 0x499602D2

+0

C++ 14에서는 타입에 대한 명시 적 언급을 없앨 수도 있습니다 -'std :: plus <>()' – Praetorian

+0

@Praetorian이 대답을 추가했습니다 – 4pie0

5
#include <algorithm> 
#include <functional> 

std::transform(vecInstA.begin(), vecInstA.end(), 
       vecInstB.begin(), vecInstC.begin(), std::plus<int>()); 
관련 문제