几个STL算法:includes,set_difference、set_intersection、set_symmetric_difference、set_union, pre_permutation

includes:ide

测试有序序列中是否包含另外一个序列的所有元素。函数

template<class inputIterator1, class inputIterator2>测试

bool includes(inputIterator1 first1, inputIterator1 last1,对象

                     inputIterator2 first2, inputIterator2 last2);排序

template<class inputIterator1 , class inputIterator2, class Comp>input

bool includes(inputIterator1 first1, inputIterator1 last1,it

                     inputIterator2 first2, inputIterator2 last2,io

                     Comp cmp);ast

两个序列必须都是排序的且相同的排序,Comp必须和两个序列用相同的排序函数对象。class

 

鉴于以上特色,用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.

相关文章
相关标签/搜索