簡體   English   中英

C ++ Boost valarray

[英]C++ Boost valarray

我正在尋找一種方便和優化的方法來比較2個valarray的相等性。 我已經看到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 );
}

如何使用Boost檢查aaa是否全部正確?

謝謝!

引用代碼中的注釋恰恰說明了這一點:

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

或者只是使用C ++ 11的標准庫:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM