1、sort 排序算法
#include <algorithm>
#include <vector>
void myPrint ( int val)
{
cout << val << " " ;
}
void test01 ( ) {
vector< int > v;
v. push_back ( 10 ) ;
v. push_back ( 30 ) ;
v. push_back ( 50 ) ;
v. push_back ( 20 ) ;
v. push_back ( 40 ) ;
sort ( v. begin ( ) , v. end ( ) ) ;
for_each ( v. begin ( ) , v. end ( ) , myPrint) ;
cout << endl;
sort ( v. begin ( ) , v. end ( ) , greater< int > ( ) ) ;
for_each ( v. begin ( ) , v. end ( ) , myPrint) ;
cout << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}
2、random_shuffle洗牌 指定范围内的元素随机调整次序
#include <algorithm>
#include <vector>
#include <ctime>
class myPrint
{
public :
void operator ( ) ( int val)
{
cout << val << " " ;
}
} ;
void test01 ( )
{
srand ( ( unsigned int ) time ( NULL ) ) ;
vector< int > v;
for ( int i = 0 ; i < 10 ; i++ )
{
v. push_back ( i) ;
}
for_each ( v. begin ( ) , v. end ( ) , myPrint ( ) ) ;
cout << endl;
random_shuffle ( v. begin ( ) , v. end ( ) ) ;
for_each ( v. begin ( ) , v. end ( ) , myPrint ( ) ) ;
cout << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}
* * 总结:* * random_shuffle洗牌算法比较实用,使用时记得加随机数种子
3、merge 两个容器元素合并,并存储到另一容器中
#include <algorithm>
#include <vector>
class myPrint
{
public :
void operator ( ) ( int val)
{
cout << val << " " ;
}
} ;
void test01 ( )
{
vector< int > v1;
vector< int > v2;
for ( int i = 0 ; i < 10 ; i++ )
{
v1. push_back ( i) ;
v2. push_back ( i + 1 ) ;
}
vector< int > vtarget;
vtarget. resize ( v1. size ( ) + v2. size ( ) ) ;
merge ( v1. begin ( ) , v1. end ( ) , v2. begin ( ) , v2. end ( ) , vtarget. begin ( ) ) ;
for_each ( vtarget. begin ( ) , vtarget. end ( ) , myPrint ( ) ) ;
cout << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}
4、 reverse将容器内元素进行反转
#include <algorithm>
#include <vector>
class myPrint
{
public :
void operator ( ) ( int val)
{
cout << val << " " ;
}
} ;
void test01 ( )
{
vector< int > v;
v. push_back ( 10 ) ;
v. push_back ( 30 ) ;
v. push_back ( 50 ) ;
v. push_back ( 20 ) ;
v. push_back ( 40 ) ;
cout << "反转前: " << endl;
for_each ( v. begin ( ) , v. end ( ) , myPrint ( ) ) ;
cout << endl;
cout << "反转后: " << endl;
reverse ( v. begin ( ) , v. end ( ) ) ;
for_each ( v. begin ( ) , v. end ( ) , myPrint ( ) ) ;
cout << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}
* * 总结:* * reverse反转区间内元素,面试题可能涉及到
5、copy拷贝算法
#include <algorithm>
#include <vector>
class myPrint
{
public :
void operator ( ) ( int val)
{
cout << val << " " ;
}
} ;
void test01 ( )
{
vector< int > v1;
for ( int i = 0 ; i < 10 ; i++ ) {
v1. push_back ( i + 1 ) ;
}
vector< int > v2;
v2. resize ( v1. size ( ) ) ;
copy ( v1. begin ( ) , v1. end ( ) , v2. begin ( ) ) ;
for_each ( v2. begin ( ) , v2. end ( ) , myPrint ( ) ) ;
cout << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}
* * 总结:* * 利用copy算法在拷贝时,目标容器记得提前开辟空间
6、replace替换算法
#include <algorithm>
#include <vector>
class myPrint
{
public :
void operator ( ) ( int val)
{
cout << val << " " ;
}
} ;
void test01 ( )
{
vector< int > v;
v. push_back ( 20 ) ;
v. push_back ( 30 ) ;
v. push_back ( 20 ) ;
v. push_back ( 40 ) ;
v. push_back ( 50 ) ;
v. push_back ( 10 ) ;
v. push_back ( 20 ) ;
cout << "替换前:" << endl;
for_each ( v. begin ( ) , v. end ( ) , myPrint ( ) ) ;
cout << endl;
cout << "替换后:" << endl;
replace ( v. begin ( ) , v. end ( ) , 20 , 2000 ) ;
for_each ( v. begin ( ) , v. end ( ) , myPrint ( ) ) ;
cout << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}
7、replace_if满足替换条件
#include <algorithm>
#include <vector>
class myPrint
{
public :
void operator ( ) ( int val)
{
cout << val << " " ;
}
} ;
class ReplaceGreater30
{
public :
bool operator ( ) ( int val)
{
return val >= 30 ;
}
} ;
void test01 ( )
{
vector< int > v;
v. push_back ( 20 ) ;
v. push_back ( 30 ) ;
v. push_back ( 20 ) ;
v. push_back ( 40 ) ;
v. push_back ( 50 ) ;
v. push_back ( 10 ) ;
v. push_back ( 20 ) ;
cout << "替换前:" << endl;
for_each ( v. begin ( ) , v. end ( ) , myPrint ( ) ) ;
cout << endl;
cout << "替换后:" << endl;
replace_if ( v. begin ( ) , v. end ( ) , ReplaceGreater30 ( ) , 3000 ) ;
for_each ( v. begin ( ) , v. end ( ) , myPrint ( ) ) ;
cout << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}
* * 总结:* * replace_if按条件查找,可以利用仿函数灵活筛选满足的条件
8、swap互换算法
#include <algorithm>
#include <vector>
class myPrint
{
public :
void operator ( ) ( int val)
{
cout << val << " " ;
}
} ;
void test01 ( )
{
vector< int > v1;
vector< int > v2;
for ( int i = 0 ; i < 10 ; i++ ) {
v1. push_back ( i) ;
v2. push_back ( i+ 100 ) ;
}
cout << "交换前: " << endl;
for_each ( v1. begin ( ) , v1. end ( ) , myPrint ( ) ) ;
cout << endl;
for_each ( v2. begin ( ) , v2. end ( ) , myPrint ( ) ) ;
cout << endl;
cout << "交换后: " << endl;
swap ( v1, v2) ;
for_each ( v1. begin ( ) , v1. end ( ) , myPrint ( ) ) ;
cout << endl;
for_each ( v2. begin ( ) , v2. end ( ) , myPrint ( ) ) ;
cout << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}
9、accumulate
计算两个数之和算法
#include <numeric>
#include <vector>
void test01 ( )
{
vector< int > v;
for ( int i = 0 ; i <= 100 ; i++ ) {
v. push_back ( i) ;
}
int total = accumulate ( v. begin ( ) , v. end ( ) , 0 ) ;
cout << "total = " << total << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}
10、fill填充元素算法
#include <numeric>
#include <vector>
#include <algorithm>
class myPrint
{
public :
void operator ( ) ( int val)
{
cout << val << " " ;
}
} ;
void test01 ( )
{
vector< int > v;
v. resize ( 10 ) ;
fill ( v. begin ( ) , v. end ( ) , 100 ) ;
for_each ( v. begin ( ) , v. end ( ) , myPrint ( ) ) ;
cout << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}
* * 总结:* * 利用fill可以将容器区间内元素填充为 指定的值
11、set_intersection
获取交集
#include <vector>
#include <algorithm>
class myPrint
{
public :
void operator ( ) ( int val)
{
cout << val << " " ;
}
} ;
void test01 ( )
{
vector< int > v1;
vector< int > v2;
for ( int i = 0 ; i < 10 ; i++ )
{
v1. push_back ( i) ;
v2. push_back ( i+ 5 ) ;
}
vector< int > vTarget;
vTarget. resize ( min ( v1. size ( ) , v2. size ( ) ) ) ;
vector< int > :: iterator itEnd =
set_intersection ( v1. begin ( ) , v1. end ( ) , v2. begin ( ) , v2. end ( ) , vTarget. begin ( ) ) ;
for_each ( vTarget. begin ( ) , itEnd, myPrint ( ) ) ;
cout << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}
12、set_union获取并集
#include <vector>
#include <algorithm>
class myPrint
{
public :
void operator ( ) ( int val)
{
cout << val << " " ;
}
} ;
void test01 ( )
{
vector< int > v1;
vector< int > v2;
for ( int i = 0 ; i < 10 ; i++ ) {
v1. push_back ( i) ;
v2. push_back ( i+ 5 ) ;
}
vector< int > vTarget;
vTarget. resize ( v1. size ( ) + v2. size ( ) ) ;
vector< int > :: iterator itEnd =
set_union ( v1. begin ( ) , v1. end ( ) , v2. begin ( ) , v2. end ( ) , vTarget. begin ( ) ) ;
for_each ( vTarget. begin ( ) , itEnd, myPrint ( ) ) ;
cout << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}
13、set_difference获取差集
#include <vector>
#include <algorithm>
class myPrint
{
public :
void operator ( ) ( int val)
{
cout << val << " " ;
}
} ;
void test01 ( )
{
vector< int > v1;
vector< int > v2;
for ( int i = 0 ; i < 10 ; i++ ) {
v1. push_back ( i) ;
v2. push_back ( i+ 5 ) ;
}
vector< int > vTarget;
vTarget. resize ( max ( v1. size ( ) , v2. size ( ) ) ) ;
cout << "v1与v2的差集为: " << endl;
vector< int > :: iterator itEnd =
set_difference ( v1. begin ( ) , v1. end ( ) , v2. begin ( ) , v2. end ( ) , vTarget. begin ( ) ) ;
for_each ( vTarget. begin ( ) , itEnd, myPrint ( ) ) ;
cout << endl;
cout << "v2与v1的差集为: " << endl;
itEnd = set_difference ( v2. begin ( ) , v2. end ( ) , v1. begin ( ) , v1. end ( ) , vTarget. begin ( ) ) ;
for_each ( vTarget. begin ( ) , itEnd, myPrint ( ) ) ;
cout << endl;
}
int main ( ) {
test01 ( ) ;
system ( "pause" ) ;
return 0 ;
}