函数对象(仿函数)
1.在使用时,可以像普通函数一样调用,可以有参数,可以有返回值
2.函数对象可以有自己的状态,超出普通函数的概念
3.函数对象可以作为参数传递
谓词:
返回值类型是bool 类型
形参有一个的是一元谓词,有两个的是二元谓词
内建仿函数:#include<functional>
1.算数仿函数
2.关系仿函数
3.逻辑仿函数
算法:
遍历算法:
for_each( 起始迭代器,结束迭代器,函数或仿函数)函数名称,或匿名仿函数
transform(源容器起始迭代器,源容器结束迭代器,目标容器开始迭代器,函数或函数对象);
函数:在搬运过程中对数据的操作
目标容器必须要先开辟空间
查找算法:
find (开始迭代器,结束迭代器,要查元素): 查找元素,查到了返回指定元素的迭代器,找不到返回结束迭代器 自定义数据类型重载==,只能找到第一个符合条件的
find_if( 开始迭代器,结束迭代器,谓词)按条件查找元素,只能找到第一个符合条件的
adjacent_find ( 开始迭代器,结束迭代器)查找相邻重复元素,返回找到的第一个元素怒的迭代器
binary_serach (开始迭代器,结束迭代器,要查元素) 二分查找:返回bool,有序
count (开始迭代器,结束迭代器,要查元素)要查元素要和vector 容器中元素相同
count_if( 开始迭代器,结束迭代器,谓词)
两个带if 的都需要重载( )
排序算法:
1.sort( 开始迭代器,结束迭代器,谓词)第三个可填可不填
2.random_shuffle( 开始迭代器,结束迭代器)洗牌
要加种子否则每次打乱的次序一样
3.merge(b1,e1,b2,e2,b3)将两个有序容器合并,得到一个有序容器,目标容器要先开辟空间
4.reverse ( 开始迭代器,结束迭代器)反转
拷贝和替换算法:
1.copy(b1,e1,b2)
2.replace (b1,e1,旧元素,新元素) 所有旧元素
3.replace_if (b1,e1,谓词,新元素)
4.swap ( 容器一,容器二 )
算数生成算法:
头文件<numeric>
1.accumulate(b1,e1,0)累加,参数3为起始累加值
2.fill (b1,e1, num) 后期填充
常用集合算法
1.set_intersection(b1,e1,b2,e2 ,b3)交集
目标容器需要开辟空间
必须要有序
返回的是结束迭代器
2.set_union(b1,e1,b2,e2 ,b3)
有序
目标容器需要开辟两个容器相加
返回的是结束迭代器
3.set_difference 差集(b1,e1,b2,e2 ,b3)
有序
目标容器需要开辟两个容器大的
返回的是结束迭代器
补充内容:
map
的begin()
成员函数在C++标准模板库(STL)中用于返回一个迭代器,该迭代器指向map
容器中的第一个元素(即键值对)。这里的“第一个元素”是根据map
内部使用的排序准则(通常是键值对的键的升序)来确定的。
具体来说,map
的begin()
方法返回的是一个双向迭代器(bidirectional iterator),它支持递增(++
)和递减(--
)操作,但不支持随机访问(即不支持通过索引直接访问元素)。通过这个迭代器,可以遍历map
中的所有元素,直到达到由end()
返回的迭代器为止,该迭代器指向map
中最后一个元素之后的“位置”(实际上并不指向任何元素,而是一个理论上的位置,用于表示遍历的结束)。
以下是一些关键点总结:
map.begin()
:返回一个迭代器,指向map
中的第一个键值对。- 迭代器类型:在C++ STL中,
map
的迭代器是双向迭代器,支持递增和递减操作。 - 遍历:可以使用
begin()
返回的迭代器作为遍历map
的起点,与end()
返回的迭代器配合,使用循环结构(如for
循环)遍历map
中的所有元素。 - 注意事项:
end()
返回的迭代器不指向任何实际元素,而是指向最后一个元素之后的“位置”,因此在遍历过程中应注意不要尝试解引用(dereference)end()
返回的迭代器。