当前位置: 首页 > news >正文

河南艾特网站建设公司济南网络推广网络营销

河南艾特网站建设公司,济南网络推广网络营销,平台做网站点击,嘉兴公司网站模板建站STL常用算法一、常用遍历算法一、for_each 遍历容器二、transform 搬运容器到另一个容器中二、常用查找算法一、find二、find_if三、adjacent_find四、binary_search五、count六、count_if三、常用排序算法一、sort二、random_shuffle三、 merage四、reverse四、常用拷贝和替换…

STL常用算法

  • 一、常用遍历算法
    • 一、for_each 遍历容器
    • 二、transform 搬运容器到另一个容器中
  • 二、常用查找算法
    • 一、find
    • 二、find_if
    • 三、adjacent_find
    • 四、binary_search
    • 五、count
    • 六、count_if
  • 三、常用排序算法
    • 一、sort
    • 二、random_shuffle
    • 三、 merage
    • 四、reverse
  • 四、常用拷贝和替换算法
    • 一、copy
    • 二、replace
    • 三、replace_if
    • 四、swap
  • 五、常用算术生成算法
    • 一、accumulate
    • 二、fill
  • 六、常用集合算法
    • 一、set_intersection
    • 二、set_union
    • 三、set_difference

一、常用遍历算法

算法主要是由头文件 组成。
是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、追历操作、复制、修改等等。
体积很小,只包括几个在序列上面进行简单数学运算的模板函数。
定义了—些模板类.用以声明函数对象。

一、for_each 遍历容器

样例如下,这也是我们在做项目中常用的一种算法:

//回调函数实现
void print1(int val)
{cout << val << " ";
}//仿函数实现
class print2
{
public:void operator()(int val){cout << val << " ";}
};void test08()
{vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);for_each(v.begin(), v.end(), print1);for_each(v.begin(), v.end(), print2());
}

二、transform 搬运容器到另一个容器中

transform( iterator beg1,iterator end1,iterator beg2,_func) ;
具体的案例如下:

//函数实现
void print1(int val)
{cout << val << " ";
}//仿函数实现
class Transform
{
public:int operator()(int val){return val;}
};void test08()
{vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);vector<int> v2;v2.resize(v.size());//目标容器需要提前开辟空间transform(v.begin(), v.end(), v2.begin(), Transform());for_each(v.begin(), v.end(), print1);

二、常用查找算法

下面为函数实现的接口:
find 查找元素
find_if 按条件查找元素
adjacent_find 查找相邻重复元素
binary _search 二分查找法
count 统计元素个数
count_if 按条件统计元素个数

一、find

查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()
函数原型:
find(iterator beg, iterator end, value);
按值查找元素,找到返回指定位位置迭代器,找不到返回结束迭代器位置
beg 开始迭代器
end结束迭代器
value查找的元素
案例一:

	vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);vector<int>::iterator pos = find(v.begin(), v.end(), 10);cout << *pos << endl; 

案例二:

class Person
{
public:Person(string name, int age){this->M_Age = age;this->M_Name = name;	}bool operator == (const Person & p){if (this->M_Name == p.M_Name && this->M_Age == p.M_Age){return true;}else{return false;}};string M_Name;int M_Age;};void test08()
{Person p1("张三", 10);Person p2("里斯", 20);Person p3("王五", 30);Person p4("找刘", 40);vector<Person> v;v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);vector<Person>::iterator pos = find(v.begin(), v.end(), p2);cout << (*pos).M_Age << endl;
}

二、find_if

find_if(iterator beg, iterator end,_pred);
按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置beg 开始迭代器
end结束迭代器
_Pred函数或者谓词(返回bool类型的仿函数)
具体案例如下:

//创建一个人类
class Person
{
public:Person(string name, int age){this->M_Age = age;this->M_Name = name;	}string M_Name;int M_Age;};//创建一个仿函数
class MyCompare
{
public:bool operator()(Person &p){return p.M_Age > 10;	}
};void test08()
{//实例化人Person p1("张三", 10);Person p2("里斯", 20);Person p3("王五", 30);Person p4("找刘", 40);//放入容器vector<Person> v;v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);//查找符合条件的人vector<Person>::iterator pos = find_if(v.begin(), v.end(), MyCompare());//如果存在则打印if (pos != v.end()){cout << (*pos).M_Age << endl;}	//不存在else{cout << "不存在" << endl;}
}

三、adjacent_find

查找相邻重复元素
adjacent_find(iterator beg, iterator end) ;
查找相邻重复元素,返回相邻元素的第一个位置的迭代器
beg开始迭代器
end结束迭代器
优于语法比较简单,这里就不在进行演示了。

四、binary_search

查找指定元素是否存在
bool binary_search(iterator beg, iterator end, value);
查找指定的元素,查到返回true否则false
beg开始迭代器
end结束迭代器
value查找的元素
**注意在无序序列中不可用!**如果序列是无序的,则结果未知。也许对也许错。

五、count

统计元素个数
count(iterator beg,iterator end, value);统计元素出现次数
beg 开始迭代器
end结束迭代器
value 统计的元素
注意在统计自定义数据类型时,要重载==号才可以进行对比,且在传参数的时候要用const类型的数据类型。

六、count_if

按条件统计元素个数
count_if(iterator beg,iterator end,_Pred);
beg开始迭代器
end结束迭代器
_Pred谓词
具体的语法与find_if相似,请参照上文

三、常用排序算法

sort 对容器内元素进行排序
random_shuffle 洗牌 指定范围内的元素随机调整次序
merge 容器元素合并,并存储到另一容器中
reverse 反转指定范围的元素

一、sort

对元素进行排序
sort(iterator beg, iterator end,_Pred ) ;
按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
beg开始迭代器
end 结束迭代器
_Pred 谓词

sort(v.begin(), v.end(), greaner<int>())

这里语法例子就不在列举,有兴趣的伙伴可以参考之前的内容: 第四部分

二、random_shuffle

洗牌: 指定范围内的元素随机调整次序
randomn_shuffle( iterator beg, iterator end);
beg开始迭代器
end 结束迭代器
样例过于简单就不再写样例,有兴趣的小伙伴可以自行练习。
注意在使用前要加一个随机数种子,才能实现每次运行都是随机的状态:

srand((unsigned int)time(NULL));

三、 merage

两个容器元素合并,并存储到另一个容器中
merge(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
beg1容器1开始迭代器
end1容器1结束迭代器
beg2容器2开始迭代器
end2客器2结束迭代器
dest目标容器开始迭代器
合并时两个容器必须是有序的,合并之后的序列仍然是有序的!
注意在合并之前要给目标容器提前开辟空间,否则会抛出异常!

vTarget.resize(v1.size() + v2.size());

四、reverse

将容器内元素进行反转
reverse(iterator beg,iterator end);
beg 开始迭代器
end结束迭代器
此函数过于简单就不在描述了

四、常用拷贝和替换算法

copy 容器内指定范围的元素拷贝到另一容器中
replace 将容器内指定范围的旧元素修改为新元素
replace_if 容器内指定范围满足条件的元素替换为新元素
swap 互换两个容器的元素

一、copy

copy (iterator beg,iterator end, iterator dest );
按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位詈
beg开始迭代器
end 结束迭代器
dest目标起始迭代器
注意在copy之前要给目标容器提前开辟空间,否则会抛出异常!

二、replace

replace(iterator beg,iterator end, old value,new value);
beg 开始迭代器
end结束迭代器
old value 旧元素
new value新元素

三、replace_if

将区间内满足条件的元素,替换成指定元察
replace_if(iterator beg,iterator end,_pred,new value);
beg 开始迭代器
end结束迭代器
_pred 谓词
new value替换的新元素

四、swap

互换两个容器的元素
Swap(container c1,container c2); 互换两个容器的元素
c1 容器1
c2 容器2
注意一定是同一个类型的容器进行交换,否则会抛出异常!

五、常用算术生成算法

算术生成算法属于小型算法,使用时包含的头文件为#include 算法简介:
accumulate 计算容器元素累计总和
fill 向容器中添加元素

一、accumulate

计算区间内容器元素累计总和
accumulate(iterator beg, iterator end , value);
beg开始迭代器
end结束迭代器
value 起始值:一般为零

二、fill

向容器中添加元素
fill(iterator beg, iterator end, value) ;
beg 开始迭代器
end结束迭代器
value填充的值

六、常用集合算法

在这里插入图片描述

set_intersection 求两个容器的交集
set_union 求两个容器的并集
set_difference 求两个容器的差集

一、set_intersection

set_intersection(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
beg1容器1开始迭代器
end1容器1结束迭代器
beg2容器2开始迭代器
end2容眙2结束迭代器
dest目标容器开始迭代器
注意:两个集合必须是有序序列!
特殊情况下,两个集合最大的交集是其中最小集合的全部。

v.reszie(min(v1.size(), v2.size()))

二、set_union

set_union(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
beg1容器1开始迭代器
end1容器1结束迭代器
beg2容器2开始迭代器
end2容器2结束迭代器
dest目标容器开始迭代器
注意:两个集合必须是有序序列!
特殊情况下,两个集合最大的并集是两个集合之和。
set_union返回值既是并集中最后一个元素的位置

三、set_difference

set_difference( iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
beg1容器1开始迭代器
end1容器1结束迭代器
beg2容器2开始迭代器
end2容器2结束迭代器
dest目标容器开始迭代器
注意:两个集合必须是有序序列!
特殊情况下,两个集合最大的差集是两个集合最大的一个。

http://www.dinnco.com/news/40071.html

相关文章:

  • 我要建网站毕业设计网站
  • 查询网站建设宁波 seo排名公司
  • 软件或网站是怎么做的百度手机点击排名工具
  • 网站要怎么做的海外游戏推广平台
  • 专业网站建设知识郑州网站排名推广
  • 做网站实例网络推广的方法有多选题
  • wordpress 下载文件插件优化设计答案四年级上册语文
  • 查询网站备案密码是什么情况百度高级搜索
  • wordpress默认居中seo网站诊断报告
  • 个人网站报价腾讯会议开始收费
  • 用动易建设网站教程做网站的费用
  • 怎么做好网站开发、设计免费网站大全下载
  • 个人博客网站的建设结构图电销名单渠道在哪里找
  • 网站制作 深圳有什么公司青岛网站设计微动力
  • 扁平图标网站网络的推广方式有哪些
  • 网络建设上市公司排名重庆的seo服务公司
  • 网站建设手机官网重庆百度关键词推广
  • 如何做网站导航一个品牌的策划方案
  • 免费网页建设做seo的公司
  • 常州网站建设优质商家国内seo排名分析主要针对百度
  • vue做的商城网站怎么关闭seo综合查询
  • 做网站怎么排版好看福州seo扣费
  • 广东世纪达建设集团有限公司官方网站长沙关键词自然排名
  • 免费建设网站哪个好seo门户网站优化
  • 基础建设基金南京关键词优化服务
  • 移动网站优化太原企业网站建设
  • 做mg动画赚钱网站新媒体营销策略有哪些
  • 网站如何让百度抓取竞价广告是什么意思
  • 中国建设网平台电商seo引流
  • 呼和浩特市做网站的企业突发大事震惊全国