几个STL算法:includes,set_difference、set_intersection、set_symmetric_difference、set_union, pre_permutation, next_permutation
2016-06-14 19:37
295 查看
includes:
测试有序序列中是否包含另一个序列的全部元素。
template<class inputIterator1, class inputIterator2>
bool includes(inputIterator1 first1, inputIterator1 last1,
inputIterator2 first2, inputIterator2 last2);
template<class inputIterator1 , class inputIterator2, class Comp>
bool includes(inputIterator1 first1, inputIterator1 last1,
inputIterator2 first2, inputIterator2 last2,
Comp cmp);
两个序列必须都是排序的且相同的排序,Comp必须和两个序列用相同的排序函数对象。
鉴于以上特点,用std::set<T>作为容器比较好。
set_differrence:包含在第一个有序集合中,但不包含第二个有序集合中的元素,这些不同的元素复制到最后一个参数中,最后一个参数是一个保存这些元素的容器的首迭代器,这个容器必须预先分配足够的空间来容纳元素。这些不同的元素也是有序的且排序方式与源有序集合一样,另外Comp也必须和源有序集合采用同样的排序方式。
两个有序序列不可以有重叠。
返回的是在有序序列1而不是有序序列2中的元素。
template<class inputIterator1, class inputIterator2,
class outputIterator>
outputIterator result =
set_difference(inputIterator1 first1, inputIterator1 last1,
inputIterator2 first2, inputIterator2 last2,
outputIterator first);
template<class inputIterator1, class inputIterator2,
class outputIterator>
outputIterator result =
set_difference(inputIterator1 first1, inputIterator1 last1,
inputIterator2 first2, inputIterator2 last2,
outputIterator first, Comp cmp);
还是用set容器比较好。
set_intersection:同时包含第一个和第二个集合中的元素,这些元素被复制到最后一个参数中,最后一个参数是一个保存这些元素的容器的首迭代器,这个容器必须预先分配足够的空间来容纳元素。两个集合都必须是有序的且是相同的排序。
基本上和set_difference用法一样,只是找出交集而已。还是用set。
set_symmetric_difference:包含在第一个集合但是不包含在第二个集合中的元素,包含在第2个集合但是不包含在第1个集合中的元素,同时被复制到最后一个参数中。用法跟基本上和set_difference用法一样。两个集合都必须是有序的且是相同的排序。
set_union:包含两个集合中所有元素的几个,同时被复制到最后一个集合中。 两个集合都必须是有序的且是相同的排序。
也就是求两个元素的公共元素,用法基本同set_difference。
pre_permutation:重排区间中的元素,使得源序列变成按照字典序列的上一个序列,其中的“上一个”可由用户自己定义。
template<class Iterator>
bool pre_permutation(Iterator first, Iterator last);
template<class Iterator, class Comp>
bool pre_permutation(Iterator first, Iterator last, Comp cmp);
int main()
{
vector<int> p;
p.push_back(2);
p.push_back(2);
p.push_back(1);
p.push_back(-1);
p.push_back(0);
do {
copy(p.begin(), p.end(), ostream_iterator<int>(cout, " "));
cout << "/n";
} while (prev_permutation(p.begin(), p.end()));
}
next_permutation的用法同pre_permutation.
测试有序序列中是否包含另一个序列的全部元素。
template<class inputIterator1, class inputIterator2>
bool includes(inputIterator1 first1, inputIterator1 last1,
inputIterator2 first2, inputIterator2 last2);
template<class inputIterator1 , class inputIterator2, class Comp>
bool includes(inputIterator1 first1, inputIterator1 last1,
inputIterator2 first2, inputIterator2 last2,
Comp cmp);
两个序列必须都是排序的且相同的排序,Comp必须和两个序列用相同的排序函数对象。
鉴于以上特点,用std::set<T>作为容器比较好。
set_differrence:包含在第一个有序集合中,但不包含第二个有序集合中的元素,这些不同的元素复制到最后一个参数中,最后一个参数是一个保存这些元素的容器的首迭代器,这个容器必须预先分配足够的空间来容纳元素。这些不同的元素也是有序的且排序方式与源有序集合一样,另外Comp也必须和源有序集合采用同样的排序方式。
两个有序序列不可以有重叠。
返回的是在有序序列1而不是有序序列2中的元素。
template<class inputIterator1, class inputIterator2,
class outputIterator>
outputIterator result =
set_difference(inputIterator1 first1, inputIterator1 last1,
inputIterator2 first2, inputIterator2 last2,
outputIterator first);
template<class inputIterator1, class inputIterator2,
class outputIterator>
outputIterator result =
set_difference(inputIterator1 first1, inputIterator1 last1,
inputIterator2 first2, inputIterator2 last2,
outputIterator first, Comp cmp);
还是用set容器比较好。
set_intersection:同时包含第一个和第二个集合中的元素,这些元素被复制到最后一个参数中,最后一个参数是一个保存这些元素的容器的首迭代器,这个容器必须预先分配足够的空间来容纳元素。两个集合都必须是有序的且是相同的排序。
基本上和set_difference用法一样,只是找出交集而已。还是用set。
set_symmetric_difference:包含在第一个集合但是不包含在第二个集合中的元素,包含在第2个集合但是不包含在第1个集合中的元素,同时被复制到最后一个参数中。用法跟基本上和set_difference用法一样。两个集合都必须是有序的且是相同的排序。
set_union:包含两个集合中所有元素的几个,同时被复制到最后一个集合中。 两个集合都必须是有序的且是相同的排序。
也就是求两个元素的公共元素,用法基本同set_difference。
pre_permutation:重排区间中的元素,使得源序列变成按照字典序列的上一个序列,其中的“上一个”可由用户自己定义。
template<class Iterator>
bool pre_permutation(Iterator first, Iterator last);
template<class Iterator, class Comp>
bool pre_permutation(Iterator first, Iterator last, Comp cmp);
int main()
{
vector<int> p;
p.push_back(2);
p.push_back(2);
p.push_back(1);
p.push_back(-1);
p.push_back(0);
do {
copy(p.begin(), p.end(), ostream_iterator<int>(cout, " "));
cout << "/n";
} while (prev_permutation(p.begin(), p.end()));
}
next_permutation的用法同pre_permutation.
相关文章推荐
- 关于通过注解反射实现findViewById(int x);的原理
- JS页面加载完毕后执行的多种方式和比较
- 简易JS模板引擎
- 实现javascript Date加减功能
- kmdjs集成uglifyjs2打造极致的编程体验
- css小技巧
- js时间字符串转Date对象
- 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
- 使用dropkick.js插件实现省市区三级联动效果
- JS 监控页面刷新,关闭 事件的方法
- LNK4098 defaultlib 'library' conflicts with use of other libs; use /NODEFAULTLIB:library
- H5新增的块级的语义元素
- Javascript笔记——String对象的常用方法
- 前端组件 -- select2用法小结
- 向json数组添加元素
- H5 新增的元素和废除的元素
- 精通D3.js学习笔记(1)基础的函数
- 前端页面在手机浏览器显示时锚点失效的解决
- pure.css 学习记录
- animate.css动画样式详解