2016-06-10 4 views
0

나는 void 함수를 사용하여 점 집합의 시작과 끝 (Setiterator set_begin, Setiterator set_end)에 반복자를 인자로 취하고, 계산을 수행 할 쿼리 포인트를 (필자는 결과를 추가하기 위하여려고하고있다) 점 세트의 beginnig에 반복자는std :: transform을 사용하여 계산하는 방법

void computedist(Setiterator set_begin, Setiterator set_end, 
Vector const& query_point, DistanceIterator dist_begin) 
{ 
    std::transform(set_begin, set_end, dist_begin, calculation); 

} 

나는 표준으로 : 내가 할 수있는 변환 읽었습니다 그 지점의 전체 집합을 통해 계산하지만 C++을 처음 접했을 때 어떻게 계산을 정의해야하는지 모르겠습니다. 이 경우

, 나는 질의 지점으로 지점의 거리를 계산하려면 :

내 계산이

double calc_dist(double query_point, double point_of_the_set){ 
    double dist; 
    dist = fabs(query_point - point_of_the_set); 
    return dist; 

같이해야한다는 생각을하지만 난 방법을 모른다 필자는 이터레이터를 처음 사용하기 때문에 함수에 대한 논증을 제공한다.

감사합니다.

+1

그것은 같은 소리 ['표준은 : for_each'] (http://en.cppreference.com/w/cpp/algorithm/for_each) 당신을 위해 더 적합 할 수있다 . – NathanOliver

+1

'Vector' 타입이란 무엇이고'double'과 무슨 상관이 있습니까? – Yakk

+0

dist 값을 double로 반환하려고합니다 – Praderas

답변

1

std::transform의 풍미는 UnaryOp 함수가 const 참조로 '* iterator'를 전달하고 *dest에 쓰는 iterator::value_type의 반환 값을 기대하는 호출을 기대합니다.

#include <iostream> 
#include <algorithm> 
#include <vector> 

int main() { 
    using valtype = int; 
    std::vector<valtype> v1 { 1, 2, 3, 4, 5 }; 
    std::vector<valtype> v2(v1.size()); 
    std::transform(v1.begin(), v1.end(), v2.begin(), 
     [] (const valtype& in) { return in * 2; }); 

    for (auto& val : v2) 
     std::cout << val << '\n'; 
} 

라이브 데모가 : http://ideone.com/CUUlvA

관련 문제