-
容器、迭代器、算法,都使用了一致的接口协定
-
库算法主要在<algorithm>头文件中
-
copy算法
-
copy(begin, end, out);
把区间[begin, end)的所有元素复制到一连串从out开始的元素中
-
正确的用法示例是
std::copy(bottom.begin(), bottom.end(), std::back_inserter(ret));
back_inserter会返回容器的迭代器适配器,当它被用作目的地时,会向容器末端添加数值(扩容)
错误的示例是
std::copy(bottom.begin(), bottom.end(), ret.end());
因为copy只复制,不扩容,所以copy无法在end处赋值一个元素,因为end已经是未扩容前的边界了。而back_inserter可以先扩容,提供copy的空间
-
-
被声明为static的局部变量具有全局寿命,在随后的函数调用中将使用第一次调用所构造的对象
如果程序从这个作用域退出,那么这个变量会保留它的值直到程序下一次进入这个作用域
-
string 和容器类似,也有迭代器、各种接口方法
-
各种有用的库算法
-
accumulate(b, e, t) – 在 <numeric>中定义
把区间 [b, e) 中的元素的综合加上t以后输出
-
在 [b, e) 中查找特定值的算法
(1) find(b, e, t)
查找值t
(2) find_if(b, e, p)
根据谓词p查找
(3) search(b, e, b2, e2)
查找由 [b2, e2) 指示的序列
-
把 [b, e) 所指示的序列复制到由d指示的目的地中
(1) copy(b, e, d)
复制整个序列
(2) remove_copy(b, e, d, t)
复制所有不等于t的元素
(3) remove_copy_if(b, e, d, p)
复制所有使得p为假的元素
-
重新排列容器 [b, e) 的区间
(1) remove_if(b, e, p)
排列容器,使得[b, e)区间内使得谓词p为假的元素位于这个域的头部,返回一个迭代器,指示位于那些不被删除的元素之后的那个位置
(2) remove(b, e, t)
和remove_if类似,但是检查的是哪些元素值不等于t
-
transform(b, e, d, f)
对 [b, e) 的元素运行函数 f,把f的结果存储在d指示的目的地中
-
对 [b, e) 区间进行划分
(1) partition(b, e, p)
根据谓词p,将为真的元素放在头部,为假的元素放在尾部,迭代器指示第一个为假的元素
(2) stable_partiton(b, e, p)
和partition类似,但是会让每一个区域内的元素的输入顺序保持不变
-
equal(b, e, b2)
第一个序列[b, e),第二个序列从b2开始,比较相同长度下(所以不需要e2参数)的两个序列是否相同
-
(1) isalnum
(2) isspace
(3) isalpha
-
-
算法作用于容器的元素,而不是作用于容器
sort, remove_if, partition都会把基本容器中的元素移动到新的位置,但是它们没有改变容器本身的特性;
真正作用于容器的是容器本身的成员,例如erase, insert。
区别就是,算法是 std::sort( , , ,),而成员方法是 v.erase( , , )。
-
迭代器适配器
都在 <iterator> 头文件中定义
-
back_inserter(container)
给容器尾添加元素,容器要支持 push_back 操作
-
front_inserter(container)
给容器头添加元素,容器要支持 push_front 操作
-
inserter(container, iter)
在迭代器 iter 前添加元素
-
chapter6_使用库算法
最新推荐文章于 2024-11-21 09:59:30 发布