C++11新特性之十二:std::all_of, std::any_of, std::none_of

一.std::any_of

any_of与下列函数等效:

template<class InputIterator, class UnaryPredicate>
  bool any_of (InputIterator first, InputIterator last, UnaryPredicate pred)
{
  while (first!=last) {
    if (pred(*first)) return true;
    ++first;
  }
  return false;
}

检测在范围[first, last)内是有任意元素满足条件,如果有任意元素满足条件,返回true,否则返回false,当范围[first, last)为空时(无元素),返回false

// any_of example
#include <iostream>     // std::cout
#include <algorithm>    // std::any_of
#include <array>        // std::array

int main () {
  std::array<int,7> foo = {0,1,-1,3,-3,5,-5};

  if ( std::any_of(foo.begin(), foo.end(), [](int i){return i<0;}) )
    std::cout << "There are negative elements in the range.\n";

  return 0;
}

二.std::all_of

all_of与下列函数等效:

template<class InputIterator, class UnaryPredicate>
  bool all_of (InputIterator first, InputIterator last, UnaryPredicate pred)
{
  while (first!=last) {
    if (!pred(*first)) return false;
    ++first;
  }
  return true;
}

检测在范围[first, last)内是否所有元素都满足条件,如果所有元素都满足条件,返回true,否则返回false,当范围[first, last)为空时(无元素),返回true

// all_of example
#include <iostream>     // std::cout
#include <algorithm>    // std::all_of
#include <vector>        // std::vector

int main () {
  std::vector<int> foo = {3,5,7,11,13,17,19,23};

  if ( std::all_of(foo.begin(), foo.end(), [](int i){return i%2;}) )
    std::cout << "All the elements are odd numbers.\n";

  return 0;
}

三.std::none_of

none_of与下列函数等效:

template<class InputIterator, class UnaryPredicate>
  bool none_of (InputIterator first, InputIterator last, UnaryPredicate pred)
{
  while (first!=last) {
    if (pred(*first)) return false;
    ++first;
  }
  return true;
}

检测在范围[first, last)内是否所有元素都不满足条件,如果所有元素都不满足条件,返回true,否则返回false,当范围[first, last)为空时(无元素),返回true 

// none_of example
#include <iostream>     // std::cout
#include <algorithm>    // std::none_of
#include <vector>        // std::vector

int main () {
  std::vector<int> foo = {1,2,4,8,16,32,64,128};

  if ( std::none_of(foo.begin(), foo.end(), [](int i){return i<0;}) )
    std::cout << "There are no negative elements in the range.\n";

  return 0;
}

四.对比

input range contains
all true,
none false
some true,
some false
none true,
all false
none true,
none false
(empty range)
all_oftruefalsefalsetrue
any_oftruetruefalsefalse
none_offalsefalsetruetrue

参考链接: all_any_none_of

原文链接:https://blog.csdn.net/caoshangpa/article/details/78541318

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`std::bitset<16>` 是一个固定长度的二进制位序列,可以进行一系列的位运算和位操作。以下是一些常用的方法和技巧: 1. `.any()`: 判断是否有至少一个二进制位被设置为 1,如果有则返回 `true`,否则返回 `false`。 ```c++ std::bitset<16> bits("1010101010101010"); if (bits.any()) { std::cout << "At least one bit is set." << std::endl; } ``` 2. `.none()`: 判断是否所有二进制位都被设置为 0,如果是则返回 `true`,否则返回 `false`。 ```c++ std::bitset<16> bits("0000000000000000"); if (bits.none()) { std::cout << "All bits are unset." << std::endl; } ``` 3. `.count()`: 统计设置为 1 的二进制位的个数。 ```c++ std::bitset<16> bits("1010101010101010"); std::cout << "Number of set bits: " << bits.count() << std::endl; ``` 4. `.test()`: 判断指定位置的二进制位是否被设置为 1,如果是则返回 `true`,否则返回 `false`。 ```c++ std::bitset<16> bits("1010101010101010"); if (bits.test(0)) { std::cout << "First bit is set." << std::endl; } ``` 5. `.set()`: 将指定位置的二进制位设置为 1。 ```c++ std::bitset<16> bits("0000000000000000"); bits.set(0); std::cout << "First bit is now set: " << bits << std::endl; ``` 6. `.reset()`: 将指定位置的二进制位设置为 0。 ```c++ std::bitset<16> bits("1111111111111111"); bits.reset(0); std::cout << "First bit is now unset: " << bits << std::endl; ``` 7. `.flip()`: 反转指定位置的二进制位。 ```c++ std::bitset<16> bits("1010101010101010"); bits.flip(0); std::cout << "First bit is now flipped: " << bits << std::endl; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草上爬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值