Boost算法库——C++11算法(all_of)

头文件'boost / algorithm / cxx11 / all_of.hpp'包含单个算法all_of的四个变体。 该算法测试序列的所有元素,如果它们共享一个属性,则返回true。


例程all_of需要一个序列和一个谓词。 如果谓词在应用于序列中的每个元素时返回true,则返回true。


例程all_of_equal需要一个序列和一个值。 如果序列中的每个元素比较等于传入值,它将返回true。


这两个例程有两种形式; 第一个需要两个迭代器来定义范围。 第二种形式采用单一范围参数,并使用Boost.Range来遍历它。



一、接口

如果谓词对于序列中的每个项目都返回true,那么函数all_of返回true。 有两个版本 一个需要两个迭代器,另一个需要一个范围。

namespace boost { namespace algorithm {
template<typename InputIterator, typename Predicate>
	bool all_of ( InputIterator first, InputIterator last, Predicate p );
template<typename Range, typename Predicate>
	bool all_of ( const Range &r, Predicate p );
}}


函数all_of_equal类似于all_of,而不是使用谓词来测试序列的元素,它需要一个值进行比较。

namespace boost { namespace algorithm {
template<typename InputIterator, typename V>
	bool all_of_equal ( InputIterator first, InputIterator last, V const &val );
template<typename Range, typename V>
	bool all_of_equal ( const Range &r, V const &val );
}}



二、实例

给定包含{0,1,2,3,14,15}的容器c

bool isOdd ( int i ) { return i % 2 == 1; }
bool lessThan10 ( int i ) { return i < 10; }

using boost::algorithm;
all_of ( c, isOdd ) --> false
all_of ( c.begin (), c.end (), lessThan10 ) --> false
all_of ( c.begin (), c.begin () + 3, lessThan10 ) --> true
all_of ( c.end (), c.end (), isOdd ) --> true  // empty range
all_of_equal ( c, 3 ) --> false
all_of_equal ( c.begin () + 3, c.begin () + 4, 3 ) --> true
all_of_equal ( c.begin (), c.begin (), 99 ) --> true  // empty range


三、迭代器要求

all_of和all_of_equal在除输出迭代器之外的所有迭代器上工作。



四、复杂度

all_of和all_of_equal的所有变体都以O(N)(线性)时间运行; 也就是说,它们与列表中的每个元素进行比较。 如果任何比较失败,算法将立即终止,而不检查序列的剩余成员。



五、安全异常

all_of和all_of_equal的所有变体都通过value或const引用来获取它们的参数,而不依赖于任何全局状态。 因此,此文件中的所有例程都提供强大的异常保证。



六、注意

1、例程all_of也可作为C ++ 11标准的一部分。

2、all_of和all_of_equal都为空范围返回true,无论传递给test来测试。 当序列中没有要测试的项目时,它们都满足要测试的条件。

3、all_of_value的第二个参数是一个模板参数,而不是从第一个参数(std :: iterator_traits <InputIterator> :: value_type)推导出来,因为这样可以为调用者提供更多的灵活性,并利用内置的由迭代器指向的比较类型。 该函数被定义为返回true,如果对于序列中的所有元素,表达式* iter == val计算为true(其中,iter是序列中每个元素的迭代器)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"boost_throw_exception_current_function was not declared"是一个编译错误,意味着在编译过程中找不到boost_throw_exception_current_function的声明。 首先,我们需要了解boost_throw_exception_current_function是Boost中的一个函数。Boost是一个流行的C++开源,提供了许多具有扩展功能的工具和函数。 出现这个错误可能有几种原因: 1. 未正确安装Boost:确保已正确安装并配置了Boost,包括包含正确的头文件路径和链接到正确的文件。 2. 缺少必要的头文件:检查代码中是否包含了正确的头文件。boost_throw_exception_current_function可能是某个其他Boost函数的依赖项,因此你可能需要包含相应的Boost头文件。 3. Boost版本不兼容:某些函数在不同版本的Boost中可能被删除或更改。确保你正在使用与代码兼容的Boost版本。 解决这个错误的方法可以尝试以下步骤: 1. 确保你已正确安装并配置了Boost。 2. 确保你已包含所需的头文件,可能包括boost_throw_exception_current_function所依赖的头文件。 3. 如果确定你的代码与Boost版本兼容,但问题仍然存在,那么可能是编译器无法找到boost_throw_exception_current_function的声明。这可能是因为函数名被更改或删除。在这种情况下,你应该查找类似的功能或更改你的代码以适应最新的Boost版本。 总之,解决这个问题需要确保正确安装Boost、包含正确的头文件并与Boost版本兼容。如果问题仍然存在,可能需要进一步调查为什么编译器无法找到该函数的声明。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值