2017-11-29 6 views
1

벡터에서 변환/기능을 수행해야 할 때 최근에 범위 어댑터를 사용하기 시작했습니다. 다음은 범위 어댑터를 사용하기 시작할 때 가장 간단한 예제 중 하나의 스 니펫입니다.C++ 부스트 범위 어댑터 여러 벡터

int multiplyByTwo(int n) { return n*2; } 
std::vector<int> num = {1, 2, 3, 4, 5}; 
auto result = num | boost::adaptors::transformed(multiplyByTwo); 

내 함수에서 하나의 인수 대신 두 개의 인수가 필요한 경우 범위 어댑터에 두 개의 벡터를 전달할 수있는 방법이 있습니까? 예를 들어,이 상황에서 :

int multiplyBoth(int n1, int n2) {return n1*n2; } 
std::vector<int> num1 = {1, 2, 3, 4, 5}; 
std::vector<int> num2 = {1, 2, 3, 4, 5}; 

는 여전히 다양한 어댑터를 통해 내 기능에 num1num2을 모두 벡터 파이프 할 수 있습니까? 이 같은 아마 뭔가 :

auto result = num1 | num2 | boost::adaptors::transformed(multiplyBoth); 
+0

'std :: transform'을 사용 하는게 어떻습니까? –

답변

1

당신은 튜플의 범위에 여러 범위를 설정하는 combine를 사용할 수 있습니다.

튜플을 처리 할 수 ​​있도록 함수를 조정해야하지만 람다가이를 수행 할 수 있습니다.

+1

OPs 목표를 달성하기 위해'combine'와 λ를 사용하는 방법을 보여주기 위해이 대답에 코드 샘플을 추가하는 것이 좋을 것이라고 생각합니다. [그 중 하나를 만들었습니다] (https://wandbox.org/permlink/Ol8WpGGSvn8sB6Qc) 그냥 사용하고 싶다면. – AndyG

+0

감사합니다. Sebastian. 나는 boost :: combine를 생각했지만 함수 입력 인자를 튜플로 변경해야한다고 생각하고있었습니다. 누군가가 범위 어댑터와 함께 튜플을 사용하는 몇 가지 예를 보여줄 수 있으면 기능 서명을 변경하지 않아도됩니다. – Zen

+0

감사합니다. Andy! 예를 묻고 나서 의견을 보았습니다! 그것은 내가 바라는 바를 정확히 수행합니다! – Zen