2014-11-21 4 views
1

이중 경로 연산자 < double>에 요소 단위로 단항 연산자, 특히 abs()를 적용하고 싶습니다.MTL4 dense_vector에 요소 단위로 단항 연산자 (예 : abs())를 적용합니다. <double>

(수동으로 루프를 작성하는 것이 아니라)이를 수행 할 원시 변형이 있습니까? 그렇다면 개념에 대한 간략한 설명이 필요합니다.

나는 MTL4 Entire Manual에서 찾아보고 어떻게 할 수 있는지 알 수 없었다. 그것은 어떻게 든 필자를 정의해야만하는 것 같습니다. 그것은 mtl :: sfunctor :: abs입니까? 그렇다면 어떻게 벡터에 적용 할 수 있습니까?

답변

0

source of dense_vector을 잠시 살펴본 후 표준 준수 컨테이너처럼 보입니다. 따라서 작동해야합니다 :

std::transform(v.begin(), v.end(), v.begin(), 
    static_cast<double(*)(double)>(&std::abs)); 
+0

실제로 작동합니다. 많은 감사합니다. 그 결론에 이르게 한 선들의 이름을 말씀해 주시겠습니까? 실용적인 관점에서 계산의 복잡성에 대해 어떻게 생각하십니까? 표준 루프와 비교하여 차이가 있습니까? – tmp

+0

컨테이너에 반복자가 있으며 알고리즘을 사용하기에 충분해야합니다. 그것은 관용적 인 C++입니다. 후드 아래에 O (n) 루프가 있기 때문에 일반 루프도 효율적일 수 있지만 알고리즘을 사용하면 의도가 명확 해집니다 (컴파일러가 더 나은 최적화를 수행 할 수 있습니다). – jrok