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.