C++ Tutorial/STL Algorithms Helper/bind2nd

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Demonstrate bind2nd()

<source lang="cpp">#include <iostream>

  1. include <list>
  2. include <functional>
  3. include <algorithm>

using namespace std; int main() {

 list<int> lst;
 list<int>::iterator p, endp;
 for(int i=1; i < 20; i++) lst.push_back(i);
 cout << "Original sequence:\n";
 p = lst.begin();
 while(p != lst.end()) {
   cout << *p << " ";
   p++;
 }
 cout << endl;
 endp = remove_if(lst.begin(), lst.end(),
                  bind2nd(greater<int>(), 8));
 cout << "Resulting sequence:\n";
 p = lst.begin();
 while(p != endp) {
   cout << *p << " ";
   p++;
 }
 return 0;

}</source>

Original sequence:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Resulting sequence:
1 2 3 4 5 6 7 8

replace_if bind2nd and greater

<source lang="cpp">#include <algorithm>

  1. include <functional>
  2. include <vector>
  3. include <iostream>

using namespace std; void print(int elem) {

 cout << elem << " ";

} int main(int argc, char** argv) {

 vector<int> myVector;
 myVector.push_back(1);
 myVector.push_back(2);
 myVector.push_back(3);
 myVector.push_back(4);
 myVector.push_back(5);
 myVector.push_back(6);
 replace_if(myVector.begin(), myVector.end(), bind2nd(greater<int>(), 100),100);
 for_each(myVector.begin(), myVector.end(), &print);
 cout << endl;
 return (0);

}</source>

replace_if, bind2nd and less

<source lang="cpp">#include <algorithm>

  1. include <functional>
  2. include <vector>
  3. include <iostream>

using namespace std; void print(int elem) {

 cout << elem << " ";

} int main(int argc, char** argv) {

 vector<int> myVector;
 myVector.push_back(1);
 myVector.push_back(2);
 myVector.push_back(3);
 myVector.push_back(4);
 myVector.push_back(5);
 myVector.push_back(6);
 replace_if(myVector.begin(), myVector.end(), bind2nd(less<int>(), 0), 0);
 replace_if(myVector.begin(), myVector.end(), bind2nd(greater<int>(), 100),100);
 for_each(myVector.begin(), myVector.end(), &print);
 cout << endl;
 return (0);

}</source>

trasform, bind2nd and plus

<source lang="cpp">#include <algorithm>

  1. include <functional>
  2. include <iostream>
  3. include <vector>

using namespace std; void print(int elem) {

 cout << elem << " ";

} int main(int argc, char** argv) {

 vector<int> myVector;
 myVector.push_back(1);
 myVector.push_back(2);
 myVector.push_back(3);
 myVector.push_back(4);
 for_each(myVector.begin(), myVector.end(), &print);
 transform(myVector.begin(), myVector.end(), myVector.begin(),bind2nd(plus<int>(), 100));
 for_each(myVector.begin(), myVector.end(), &print);
 cout << endl;
 return (0);

}</source>

Use bind2nd() to create a unary function object that will return true when a value is greater than 10.

<source lang="cpp">#include <iostream>

  1. include <list>
  2. include <functional>
  3. include <algorithm>

using namespace std; int main() {

 list<int> list1;
 list<int>::iterator res_itr;
 for(unsigned i=1; i < 20; ++i) list1.push_back(i);
 res_itr = remove_if(list1.begin(), list1.end(),bind2nd(greater<int>(), 10));
 return 0;

}</source>

Use the generic count algorithm with predicate: Determine the number of array elements that are not equal to 1

<source lang="cpp">#include <iostream>

  1. include <cassert>
  2. include <algorithm>
  3. include <functional>

using namespace std; int main() {

 int a[] = {0, 0, 0, 1, 1, 1, 2, 2, 2};
 int final_count = count_if(&a[0], &a[9], bind2nd(not_equal_to<int>(), 1));
 cout << final_count << endl;  
 return 0;

}</source>

6