分类:
2010-10-16 11:56:43
-------------------------------------------------------------------------------------------------------------
三. 算法
1.容器操作
1).
fill ,fill_n: 将容器中某一区间的元素全部设为某值
比如:
vector
fill( v.begin(), v.end(), 5 ); //将全部元素设为5
vector
fill_n(vc.begin(),5, ‘A’); //将 begin()及其后5个元素设为‘A’
素。如果[first,last)中没有元素等于val,那么 fdwIt 等于 last
3).
remove_copy
template
OutIt remove_copy(InIt first, InIt last, OutIt x, const T& val);
将 [first,last)中所有不等于 val 的元素,拷贝到另一容
器中从 x 开始的位置(会覆盖另一容器中原有的元素,
须确保另一容器足够长,否则会出错)
返回值是另一容器的迭代器,指向被拷贝序列的最后一个
元素的后面。如果操作在同一容器上进行,
则 [x, x + (last - first)) 不能和 [first, last) 有重叠,否则会出错。
2) count:
template
size_t count(InIt first, InIt last, const T& val);
计算[first,last) 中等于val的元素个数
5)max_element:
template
FwdIt max_element(FwdIt first, FwdIt last);
返回[first,last) 中最大(不小)元素的迭代器,以 “< ”作比较器
template
FwdIt max_element(FwdIt first, FwdIt last, Pred pr);
返回[first,last) 中最大(不小)元素的迭代器, 以 pr 作比较器
6)accumulate
template
T accumulate(InIt first, InIt last, T val);
对 [first,last)区间中的每个迭代器 I ,
执行 val = val + * I;
返回 val
template
T accumulate(InIt first, InIt last, T val, Pred pr);
对 [first,last)区间中的每个迭代器 I ,
执行 pr(val, *I), 返回 val
3) binary_search 折半查找,要求容器已经有序
template
bool binary_search(FwdIt first, FwdIt last, const T& val);
template
bool binary_search(FwdIt first, FwdIt last, const T& val, Pred pr);
The first template function determines whether a value of N
exists in the range [0, last - first) for which *(first + N) has equivalent ordering to val,
where the elements designated by iterators in the range [first, last)
form a sequence ordered by operator<. If so, the function returns true.
If no such value exists, it returns false.
upper_bound:
template
FwdIt upper_bound(FwdIt first, FwdIt last, const T& val);
template
FwdIt upper_bound(FwdIt first, FwdIt last, const T& val, Pred pr);
要求[first,last)是有序的,
查找[first,last)中的,最大的位置 FwdIt,使得[FwdIt,last) 中所有的元素都比 val 大
5)equal_range
template
pair
template
pair
要求[first,last)是有序的,
返回值是一个pair, 假设为 p, 则
[first,p.first) 中的元素都比 val 小
[p.second,last)中的所有元素都比 val 大
6)sort
template
void sort(RanIt first, RanIt last);
template
void sort(RanIt first, RanIt last, Pred pr);
The first template function reorders the sequence designated
by iterators in the range [first, last) to form a sequence ordered by
operator<. Thus, the elements are sorted in ascending order.
The function evaluates the ordering predicate X < Y at most ceil((last - first) * log(last - first)) times.
The second template function behaves the same, except that it replaces operator<(X, Y) with pr(X, Y).
sort 实际上是快速排序,时间复杂度 O(n*log(n));
平均性能最优。但是最坏的情况下,性能可能非常差。
如果要保证“最坏情况下”的性能,那么可以使用
stable_sort,实际上是归并排序,特点是能保持相等元素之间
的先后次序.在有足够存储空间的情况下,复杂度为 n * log(n),否则复杂度为 n * log(n) * log(n)
stable_sort 用法和 sort相同
排序算法要求随机存取迭代器的支持,所以list 不能使用排序算法,要使用list::sort 。此外还有其他排序算法:
partial_sort : 部分排序,直到 前 n 个元素就位即可
nth_element : 排序,直到第 n个元素就位,并保证比第n个元素小的元素都在第 n 个元素之前即可
partition: 改变元素次序,使符合某准则的元素放在前面.
请路过的各位朋友指教:)