оптимизация — C ++ Boost valarray

Я ищу удобный и оптимизированный способ сравнить 2 значения для равенства. Я видел, что Boost несколько поддерживает это:

В /boost/accumulators/numeric/functional/valarray.hpp —

// 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 все верно с помощью Boost?

Спасибо!

1

Решение

Комментарий в вашем цитируемом коде говорит именно это:

bool allTrue = boost::numeric::promote<bool>(aaa);

Или просто со стандартной библиотекой C ++ 11:

bool allTrue = std::all_of(begin(aaa), end(aaa), [](bool b){return b;});
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]