C++ boost::algorithm::one_of()














































C++ boost::algorithm::one_of()



Description:
The header 'boost/algorithm/cxx11/one_of.hpp'   contains the algorithm one_of() in C++ boost library. This function tests if one and only one of the element in the range returns 'true'  for some unary function. The unary function accepts each and every array elements individually and returns a Boolean value. The function also returns 'false' if the sequence is empty.

Syntax:
template <class InputIterator, class UnaryPredicate>
bool one_of(InputIterator first, InputIterator last, UnaryPredicate pred);


Parameters:
The following parameters are accepted by the function:
1.) first: It specifies the initial position of the sequence by input iterator (first is inclusive in range).
2.) last: It specifies the end position of the sequence by input iterator (last is exclusive in range).
3.) pred: It is a unary function that accepts the elements of the sequence in the range provided in argument. It returns a Boolean value where true indicates exactly one of the element in sequence have same property to that of the predicate.


The function returns true if one and only one element of the sequence returns true for the predicate else it returns false.


Program:
#include <iostream>
#include <vector>
#include <boost/algorithm/cxx11/one_of.hpp>

using namespace std;

int main()
{
   
int n;
   
cout << "Enter array size: ";
   
cin >> n;
   
cout << "Enter n elements: ";
   
vector<int> A(n);
   
for(int i = 0; i < n; i++)
       
cin >> A[i];

   
/* predicate which checks if exactly one
    *  element of the sequence is
equal to 5.
    */

   
auto predicate = [](char element) { return element == 5; };
   
bool res1 = boost::algorithm::one_of(A.begin(), A.begin()+n, predicate); //for the range [0, n)
   
//bool res2 = boost::algorithm::one_of(A, predicate); //for entire array

   
if(res1)
       
cout << "Exactly one element is equal to 5";
   
else
       
cout << "Exactly one element is not equal to 5";

   
return 0;
}


Example:
1.) Enter array size: 5
     Enter n elements: 1 2 3 4 5
     Output: Exactly one element is equal to 5
2.) Enter array size: 5

     Enter n elements: 5 1 2 5 4
     Output: Exactly one element is not equal to 5


Complexity:
Time Complexity: The time complexity is linear between the first and last elements. Predicate is called for the same number of time.

Please write on comment section if you find any mistake or for any suggestions.

More Articles of Abhishek Kumar Singh:

Name Views Likes
C++ boost::range::replace_if 956 0
C++ boost::range::copy_backward 724 1
C++ boost::range::max_element 1177 0
C++ boost::range::inplace_merge 647 0
C++ boost::range::copy 1250 1
C++ boost::algorithm::is_partitioned() 819 1
C++ boost::algorithm::copy_if() 967 0
C++ boost::range::for_each (version 2) 727 0
C++ boost::range::set_symmetric_difference 636 0
C++ boost::remove_copy_if 723 0
C++ boost::range::set_intersection 940 0
C++ boost::range::find_end 673 0
C++ boost::range::remove_erase_if 1480 0
C++ boost::range::push_back 1086 0
C++ boost::range::generate 624 0
C++ boost::algorithm::any_of() 625 0
C++ boost::range::insert 696 0
C++ boost::range::remove_erase 896 0
C++ boost::range::reverse 1165 0
C++ boost::algorithm::equal() 724 1
C++ boost::range::copy_n 804 0
C++ boost::range::random_shuffle 1218 1
C++ boost::algorithm::partition_point() 586 0
C++ boost::algorithm::one_of_equal() 508 0
C++ boost::algorithm::all_of() 857 1
C++ boost::range::merge 962 0
C++ boost::range::reverse_copy 733 0
C++ boost::range::find 716 0
C++ boost::range::fill_n 586 0
Removing duplicate elements from std::vector (using std::unique and std::set) 2125 1
C++ boost::range::equal 671 0
C++ boost::algorithm::iota() 904 0
C++ boost::range::is_sorted 819 0
test article 760 2
C++ boost::algorithm::is_permutation() 808 1
C++ boost::partial_sum 831 0
C++ boost::range::partial_sort 893 1
C++ boost::range::min_element 989 0
C++ boost::range::iota 990 0
C++ boost::range::set_union 687 0
C++ boost::algorithm::partition_copy() 1046 3
C++ boost::range::swap_ranges 592 0
C++ boost::range::for_each 857 0
C++ boost::range::upper_bound 1021 0
C++ boost::range::binary_search 1187 0
C++ boost::algorithm::all_of_equal() 528 0
C++ boost::algorithm::copy_n() 647 1
C++ boost::range::lower_bound 985 0
C++ boost::algorithm::gather() 1388 0
C++ boost::algorithm::none_of_equal() 570 0
C++ boost::algorithm::one_of() 688 2
C++ boost::range::rotate 817 0
C++ boost::algorithm::any_of_equal() 817 0
Use of Comparator in C++ 2045 0
C++ boost::range::count 785 0
C++ boost::range::replace_copy_if 610 0
C++ boost::range::remove 789 2
C++ boost::remove_if 1360 1
C++ boost::range::nth_element 1095 1
C++ boost::range::partition 715 1
C++ boost::range::erase 607 0
C++ boost::range::fill 873 1
C++ boost::range::find_if 1214 0
C++ boost::range::lexicographical_compare 781 0
C++ boost::algorithm::none_of() 559 0
C++ boost::algorithm::hex() 3330 0
C++ boost::range::replace 702 0
C++ boost::range::replace_copy 794 1
C++ boost::range::set_difference 903 0
C++ boost::range::overwrite 680 0
C++ boost::range::count_if 908 0
C++ boost::range::push_front 641 0
C++ boost::range::includes 638 0
C++ boost::algorithm::is_sorted() 667 0
C++ boost::range::remove_copy 595 1
C++ boost::algorithm::minmax_element 596 1
Deletion of leaf node of a Binary Search Tree 1653 1
Nth Fibonacci Number (Recursive Solution, Dynamic Programming, Iterative Solution 3767 1
C++ boost::range::rotate_copy 621 0

Comments