C++常用遍历算法—for_each、transform
1、for_each—遍历容器
1.1 内置数据类型
void print1 ( int num)
{ cout << "这个数字是:" << num << endl;
} void test1 ( )
{ vector< int > numList; for ( int i = 0 ; i < 10 ; i++ ) { numList. push_back ( i) ; } for_each ( numList. begin ( ) , numList. end ( ) , print1) ;
}
1.2 自定义数据类型
class Person
{
public : string name; int age; Person ( string name, int age) { this -> name = name; this -> age = age; } Person ( ) { }
} ; void printPerson ( Person & p)
{ cout << p. name << "今年" << p. age << "岁了!" << endl;
} void test2 ( )
{ Person p1 ( "ncs" , 26 ) ; Person p2 ( "nbl" , 9 ) ; Person p3 ( "zes" , 51 ) ; vector< Person> pList; pList. push_back ( p1) ; pList. push_back ( p2) ; pList. push_back ( p3) ; for_each ( pList. begin ( ) , pList. end ( ) , printPerson) ;
}
2、transform—搬运一个容器的内容到另一个容器
2.1 自定义数据类型
int re ( int num)
{ return num + 10000 ;
}
void test3 ( )
{ vector< int > numList; for ( int i = 0 ; i < 10 ; i++ ) { numList. push_back ( i) ; } vector< int > vTarget; for ( int i = 0 ; i < 10 ; i++ ) { vTarget. push_back ( i) ; } for_each ( vTarget. begin ( ) , vTarget. end ( ) , print1) ; vTarget. resize ( vTarget. size ( ) + numList. size ( ) ) ; transform ( numList. begin ( ) , numList. end ( ) , vTarget. begin ( ) + numList. size ( ) , re) ; cout << "++++++++++++++++++++++\n" ; for_each ( vTarget. begin ( ) , vTarget. end ( ) , print1) ;
}
2.2 自定义数据类型
Person ageAdd ( Person& p)
{ p. age = p. age + 30 ; return p;
} void test4 ( )
{ Person p1 ( "ncs" , 26 ) ; Person p2 ( "nbl" , 9 ) ; Person p3 ( "zes" , 51 ) ; vector< Person> pList; pList. push_back ( p1) ; pList. push_back ( p2) ; pList. push_back ( p3) ; vector< Person> pList1; pList1. push_back ( p1) ; pList1. push_back ( p2) ; pList1. push_back ( p3) ; for_each ( pList. begin ( ) , pList. end ( ) , printPerson) ; pList. resize ( pList. size ( ) + pList1. size ( ) ) ; transform ( pList1. begin ( ) , pList1. end ( ) , pList. begin ( ) + pList1. size ( ) , ageAdd) ; cout << "++++++++++++++++++++++\n" ; for_each ( pList. begin ( ) , pList. end ( ) , printPerson) ; }