1
2 valarrays를 비교하는 편리하고 최적화 된 방법을 찾고 있습니다. 그 부스트 다소 것을 지원 보았다 : /boost/accumulators/numeric/functional/valarray.hpp에서C++ Boost valarray
-
가// for "promoting" a std::valarray<bool> to a bool, useful for
// comparing 2 valarrays for equality:
// if(numeric::promote<bool>(a == b))
template<typename From>
struct promote<bool, From, void, std_valarray_tag>
: std::unary_function<From, bool> {
bool operator()(From &arr) const {
BOOST_MPL_ASSERT((is_same<bool, typename From::value_type>));
for(std::size_t i = 0, size = arr.size(); i != size; ++i) {
if(!arr[i]) {
return false;
}
}
return true;
}
};
다음 사소한 코드 std::valarray
으로 실행 :
#include <valarray>
typedef std::valarray<int> valarray_t;
int main(void) {
int arr_length = 30; int num_of_idx = 5;
// initialize arr
int* arr = new int[arr_length];
for (int i=0; i<arr_length; i++)
arr[i] = i;
// Create a valarray of ints.
valarray_t vi(arr, arr_length);
std::valarray<bool> aaa = (vi == vi);
}
부스트를 사용하여 aaa
이 모두 사실인지 어떻게 확인할 수 있습니까?
감사합니다. 당신의 인용 코드
감사합니다! C++ 11 버전은 훌륭하게 작동합니다 - 감사합니다! 부스트 버전은 컴파일하지만 boost :: mpl :: if_>, bool & bool> :: :: boost :: numeric :: promote > (std :: valarray &) ' collect2 : 오류 : ld가 1 종료 상태를 반환했습니다. 더 효율적인 코드로 변환 할 수있는 아이디어가 있습니까? –
@LironCohen 두 버전 모두 성능면에서 거의 같아야한다고 생각합니다. 링커 오류의 경우'valarray.hpp '다음에'boost/accumulators/numeric/functional.hpp' *를 명시 적으로 포함시켜야합니다. http://coliru.stacked-crooked.com/a/56616329db200d43 –