一、常用遍历算法
@[TOC](目录)
目录
1.for_each
功能:从头到尾遍历
如果想遍历输出,可以这样子:
void print(int val)
{
cout << val << endl;
}
int main()
{
vector <int>v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
for_each(v.begin(), v.end(), print);
return 0;
}
2.transfom
功能:将一个容器的所有内容全部搬运到另外一个容器里面
注意:搬运的目标容器要提前开辟空间
void print(int val)
{
cout << val << endl;
}
class st
{
public:
int operator ()(int val)
{
return val;
}
};
int main()
{
vector <int>v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
vector <int>vvv;
vvv.resize(v.size());
transform(v.begin(), v.end(), vvv.begin(), st());
for_each(vvv.begin(), vvv.end(), print);
return 0;
}
3.find
find(v.begin( ) , v.end( ) , val ) 其中val表示要寻找的数
若找到则返回 val 所在的迭代器(指针),否则返回v.end()
当查找的不是数组,是一个类的时候,编译器无法进行查找,必须重载运算符==
故需加入以下代码:
二、常用查找算法
1.find_if
find_if (v.begin( ) ,v.end( ) , pre ) pre代表函数或者谓词(返回bool类型的函数)
若找到了,返回pre所在的迭代器,否则返回末尾迭代器
1.提供一个谓词查找
2.对于自定义数据类型
2.adjacent_find
adjacent_find ( v.begin ( ) , v.end ( ) )
查找相邻的重复元素,返回相邻元素第一个的迭代器
-
3. binary_research
必须在有序数列中使用!
查找指定元素是否存在
bool binary_research (v.begin ( ) ,v.end ( ) , value ) 找到返回true 否则返回false
vector <int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
bool ret = binary_search(v.begin(), v.end(), 9);
4.count
count ( v.begin( ) , v.end ( ) ,value ) 数一下value的值在容器中出现了几次
vector <int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
int num = count(v.begin(), v.end(), 5);
cout << "出现了"<<num<<"次";
而在统计自定义的数据类型的时候,注意重载operator ==
5.count_if
功能:有条件的查找出现的个数
count_if (v.begin( ) ,v.end ( ) ,pre ) ,pre 代表限定的条件
class greater20
{
public:
bool operator ()(int val)
{
return val > 5;
}
};
int main()
{
vector <int>v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
int ret=count_if(v.begin(), v.end(), greater20());
cout << ret;
return 0;
}
三、常用排序算法
1.sort
功能:升序排列
sort ( v.begin ( ) ,v.end ( ) , pre ) ,pre代表谓词
当然也可以没有pre这个参数
如果是要降序,可以 sort ( v.begin ( ) ,v.end ( ) , greater( ) ) (注意使用greater 的时候加functional的头文件)
2.random_shuttle
洗牌 指定范围的元素随机调整次序
random_shuttle ( v.begin ( ),v.end ( ) )
记得加随机数种子
3.merge
将两个容器合并在一个容器中,注意v1和v2都必须是有序的 (且都是升序或者都是降序)
merge (v1.begin ( ) , v1.end ( ) , v2.begin ( ) , v2.end ( ) , vvv.begin( ) ),其中vvv代表目标容器初始迭代器
4.reverse
功能:将容器中元素进行翻转
reverse (v.begin( ) ,v,end ( ) )