Open In App

std::unary_negate() in C++ with Examples

Improve
Improve
Like Article
Like
Save
Share
Report

The std::unary_negate() is a wrapper function object returning the complement of the unary predicate it holds. A wrapper function is a subroutine in a software library or a computer program whose main purpose is to call a second subroutine or a system call with little or no additional computation. An object of type unary_negate are generally constructed using function std::not1().
Header File: 
 

#include <functional>

Syntax: 
 

std::unary_negate<class T>
    variable_name(Object of class T);

Parameters: The function std::unary_negate() accepts the predicate function object as a parameters and returns the logical complement of the result generated by calling predicate function.
Return Value: It returns the logical complement of the result by calling predicate function.
Below is the program to illustrate the function std::unary_negate():
Program 1:
 

CPP




// C++ program to illustrate
// std::unary_negate to find number
// greater than equals 4 in arr[]
 
#include <algorithm>
#include <functional>
#include <iostream>
#include <vector>
using namespace std;
 
// Predicate function to find the
// count of number greater than or
// equals to 4 in array arr[]
struct gfg : unary_function<int, bool> {
 
    // Function returns true if any
    // element is less than 4
    bool operator()(int i)
        const
    {
        return i < 4;
    }
};
 
// Driver Code
int main()
{
    // Declare vector
    vector<int> arr;
 
    // Insert value from 1-10 in arr
    for (int i = 1; i <= 10; ++i) {
        arr.push_back(i);
    }
 
    // Use unary_negate() to find the
    // count of number greater than 4
    unary_negate<gfg> func((gfg()));
 
    // Print the count of number using
    // function count_if()
    cout << count_if(arr.begin(),
                     arr.end(), func);
    return 0;
}


Output: 

7

 

Explanation: In the above program array arr[] has elements from 1 to 10 and the number of elements which is greater than equals to 4 is 7.
Program 2:
 

CPP




// C++ program to illustrate
// std::unary_negate to find number
// greater than equals 4 in arr[]
#include <algorithm>
#include <functional>
#include <iostream>
#include <vector>
using namespace std;
 
// Given Structure
struct IsOdd_class {
 
    // Predicate of this structure
    bool operator()(const int& x)
        const
    {
        return x % 2 == 1;
    }
 
    typedef int argument_type;
 
} IsOdd_object;
 
// Driver Code
int main()
{
 
    // Use unary_negate function to
    // to find the compliment of
    // predicate declare in structure
    // IsOdd_class
    unary_negate<IsOdd_class>
        IsEven_object(
            IsOdd_object);
 
    // Given array
    int arr[] = { 1, 1, 3, 9, 5 };
    int cx;
 
    // count with respect to predicate
    // generated by unary_negate()
    cx = count_if(arr, arr + 5, IsEven_object);
 
    // Print the count
    cout << "There are "
         << cx
         << " elements with even values!"
         << endl;
    return 0;
}


Output: 

There are 0 elements with even values!

 

Reference: http://www.cplusplus.com/reference/functional/unary_negate/
 



Last Updated : 03 Mar, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads