inplace_merge(应用于有序区间)
--------------------------------------------------------------------
描述:如果两个连接在一起的序列[first, middle)和 [middle, last]都已排序,
那么 inplace_merge 可将它们结合成单一一个序列,并仍有序。
源码:
template
inline void inplace_merge(Bidi...
分类:
其他好文 时间:
2014-07-20 23:27:42
阅读次数:
368
vector
----------------------------------------------------------------------
描述:
1.迭代器
vector 维护的是一个连续线性空间,它的迭代器是普通指针,
能满足 RandomAccessIterator 所有必要条件:operator*, operator->,operator++,operator--,operator+,
operator-,operator+=,operator-=,operator[]
2.数据...
分类:
其他好文 时间:
2014-07-20 23:25:57
阅读次数:
378
nth_element
------------------------------------------------------------------------------
描述:重新排序,使得[nth,last)内没有任何一个元素小于[first,nth)内的元素,
但对于[first,nth)和[nth,last)两个子区间内的元素次序则无任何保证。
思路:
1.以 median-of-3-partition 将整个序列分割为更小的左、右子序列
2.如果 nth 迭代器落于左序列,就再对左子...
分类:
其他好文 时间:
2014-07-20 23:20:34
阅读次数:
279
merge sort
----------------------------------------------------------------------
描述:归并排序
思路:
1.将区间对半分割
2.对左、右段分别排序
3.利用inplace_merge将左、右段合并成为一个完整的有序序列
复杂度:O(log n)
源码:
template
void mergesort(BidirectionalIter first, Bidirecti...
分类:
其他好文 时间:
2014-07-20 23:05:52
阅读次数:
245
search_n
----------------------------------------------------------------------------------------
描述:在序列[first, last) 所涵盖的区间中,查找"连续 count 个符合条件之元素"所形成的子序列,
并返回迭代器 last
思路:
1.首先找出 value 第一次出现点
2.该出现点的后面是否连续出现 count - 1 个 value
3.如果是,找到了,如果不是,在当前元素后的区间重新找...
分类:
其他好文 时间:
2014-07-19 23:31:25
阅读次数:
355
upper_bound(应用于有序区间)
-------------------------------------------------------------------------------------------------------------------------------------------------
描述:受STL区间前闭后开习惯的影响,upper_bound成功找到某个值时,
返回一个迭代器指向每一个"不大于 value "的元素的下一个位置,而不是指向 value 的迭代...
分类:
其他好文 时间:
2014-07-19 23:31:03
阅读次数:
289
lower_bound(应用于有序区间)
--------------------------------------------------------------------------------------------------------------------------
描述:二分查找,返回一个迭代器指向每一个"不小于 value "的元素,
或 value 应该存在的位置
思路:
1.循环直到区间长度为 0
2.如果 *middle < value,在后半段继续查找
3.如果 *mid...
分类:
其他好文 时间:
2014-07-19 23:30:41
阅读次数:
382
int main()
{
int A[] = { 1, 2, 3, 3, 3, 5, 8 };
const int N = sizeof(A) / sizeof(int);
for (int i = 1; i <= 10; ++i) {
cout << "Searching for " << i << ": "
<< (binary_search(A, A + N, i) ? "present" : "not present") << endl;
}
}
/*
...
分类:
其他好文 时间:
2014-07-19 23:29:59
阅读次数:
275
next_permutation
-----------------------------------------------------------------------
描述: 取得 [first, last) 所标示之序列的下一个排列组合。如果没有,返回 false,有,返回true
思路:
从后往前
1.找两个相邻元素,令左端的元素为*i,右端的元素为*ii,且满足 *i < *ii
2.找出第一个大于 *i 的元素,令其为 *j,将*i,*j元素对调
3.将ii右端的所有元素颠倒
源码:
t...
分类:
其他好文 时间:
2014-07-19 23:29:37
阅读次数:
383
merge (应用于有序区间)
--------------------------------------------------------------------------
描述:将两个经过排序的集合S1和S2,合并起来置于另一段空间。所得结果也是一个有序(sorted)序列
思路:
1.遍历两个序列直到其中一个结束了
2.如果序列一的元素较小,将它放到结果序列中,并前进 1
3.如果序列二的元素较小,将它放到结果序列中,前前进 1
4.遍历结束后,将还没有遍历完的序列复制到结果序列的尾部
源码:...
分类:
其他好文 时间:
2014-07-19 08:16:09
阅读次数:
212