实用但可能鲜为人知的 C++ STL 整理(持续收集中…)

2021-03-26 21:26

阅读:701

标签:迭代   收集   包含   单位   middle   filename   tor   源文件   code   

收录了一些较为实用的 STL,并进行了简单描述,供大佬们参考。

如果发现有错误,欢迎在评论区指出。

同时欢迎各位进行添加。

  • assert (expr);

assert 是一个宏,当表达式 expr 的值为 0 时,程序会被终止(RE),然后你会得到一个消息,包含这个表达式的内容,表达式所在行号及源文件名:Assertion failed: expression, file filename, line line number

常用于:调试。头文件:

  • nth_element(first, nth, last);

重新排列区间 [first, last) ,使得位置 nth 的值等于该区间排序后该位置的值。即,执行后 [first, nth) 中所有元素的值小于等于 nth(nth, last) 中所有元素的值大于等于 nth。可以在最后加上比较函数 comp。期望复杂度为线性。

常用于:K-D Tree 的建树。头文件:

  • merge(first1, last1, first2, last2, result);

合并两个已经排好序的区间 [first1, last1), [first2, last2)result(新区间将 result 作为首迭代器),并返回合并后的尾迭代器。合并后新区间仍然有序。可以在最后加上比较函数 comp。注意若 [result, 返回值) 于两个区间相交可能会出错。时空复杂度线性。

常用于:归并排序,分治。头文件:

  • inplace_merge(first, middle, last);

合并两个相邻的有序区间 [first1, last1), [first2, last2)[first, last)。效果与 merge 函数类似。可以在最后加上比较函数 comp。若有可以额外使用的内存,那么时空复杂度为线性;反之空间消耗为常数,但时间为线性对数复杂度。

常用于:归并排序,分治。头文件:

  • accumulate(first, last, init, op);

init 的基础上,对区间 [first,last)op 的运算方式进行累计。参数 op没有时则默认为 + 运算符。复杂度线性。

常用于:偷懒。头文件:

  • iota(first, last, val);

对区间 [first, last) 赋值,从 first 开始,每次将 val 赋值为当前位置,然后执行 ++val。复杂度线性。

常用于:偷懒。头文件:

  • partial_sum(first, last, result);

对区间 [first, last) 计算前缀和,结果存入 result。当然也可以在参数后加上 op,代替加法做前缀运算。复杂度线性。

常用于:偷懒。头文件:

  • prev(it, n = 1);

返回迭代器 it 向前 n(默认为 1)个单位的结果。如果是随机访问迭代器那么会直接使用 - 运算符,复杂度为常数;

否则使用 n-- 运算符,复杂度线性。

常用于:偷懒。头文件:

  • next(it, n = 1);

返回迭代器 it 向后 n(默认为 1)个单位的结果。如果是随机访问迭代器那么会直接使用 + 运算符,复杂度为常数;

否则使用 n++ 运算符,复杂度线性。

常用于:偷懒。头文件:

实用但可能鲜为人知的 C++ STL 整理(持续收集中…)

标签:迭代   收集   包含   单位   middle   filename   tor   源文件   code   

原文地址:https://www.cnblogs.com/-Wallace-/p/13680960.html


评论


亲,登录后才可以留言!