STL学习笔记(迭代器相关辅助函数)

advance()可令迭代器前进

#include <iterator>
void advance(InputIterator& pos,Dist n);

面对Random Access(随机存取)迭代器,该函数只是简单的调用pos+=n。而对于其他任何类型的迭代器则调用++pos(--pos)n次。

distance()可以处理迭代器之间的距离

#include <iterator>
Dist distance(InputIterator pos1,InputIterator pos2);

面对Random Access迭代器,该函数仅仅传回pos2-pos1。而对于其他迭代器,则会不断递增pos1,知道抵达pos2为止,然后传回递增次数。

iter_swap()可交换两个迭代器所指内容

#include <iterator>
void iter_swap(ForwardIterator pos1,ForwardIterator pos2);

迭代器型别不必相同,但所指的两个值必须可以相互赋值。

Vector迭代器的递增

考虑下面例子:

std::vector<int> coll;
...
if(coll.size()>1){
    sort(++coll.begin(),coll.end())
}

通常编译sort()会失败。因为vector一般实作为一般指针,而C++不允许修改任何基本型别(包括指针)的暂时值。而对于struct和class则允许。

如果vector实作为一般指针,则会编译失败,如果vector实作为class,则可以通过编译。

时间: 2024-10-14 11:51:37

STL学习笔记(迭代器相关辅助函数)的相关文章

jQuery学习笔记--JqGrid相关操作 方法列表(上)

1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(json):$("#gridid").jqGrid('getRowData', id); 3.刷新列表:$(refreshSelector).jqGrid('setGridParam', { url: ''), postData: ''}).trigger('reloadGrid'); 4.选中行:$("#jqGrid

MySQL学习笔记-事务相关话题

事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都不保存. InnoDB存储引擎中的事务完全符合ACID的特性. 原子性(atomicity) 原子性是指整个数据库事务是不可分割的工作单位.只有使事务中所有的数据库操作执行都成功,才算整个事务成功.如果事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行

STL学习笔记--&gt;初识STL

“这里要用char类型”; “这里要用int类型”; “其实实现这个方法只需要把另一个方法的返回值的类型和传入参数的类型改成float类型就实现了”; “其实这个算法只需要把以前写的那个稍微改动一下就行了”; ……………… 学过面向对象语言的都知道GP这个概念,就是泛型程序设计,说的再明白点就是编写不依赖于具体数据类型的程序,C++作为一门面向对象语言,当然也有泛型这个概念,这就不得不提STL(Standard Template Library,标准模板库),是被融入C++标准程序库里面的一个高

STL学习笔记--3、迭代器iterator与traits编程

iterator模式:提供一种方法,依次巡访某个聚合物(容器)所含的各个元素,而无需暴露该聚合物的内部表达式. 1.迭代器设计思维 STL在于将数据容器和算法分开,彼此独立,最后再以一帖粘合剂将它们撮合在一起.只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作. 算法find():接受两个迭代器和一个搜寻目标. //摘自SGI<stl_algo.h> template <class InputIterator, class T> InputIterator find(Inp

STL学习笔记— —iterator迭代器

头文件 所有的容器都定义了自己的迭代器类型,所以一般情况下,不需要再自己添加迭代器头文件.但是如果要使用一些特殊的迭代器,如反向迭代器,或者一些迭代器辅助函数,那么就需要添加头文件<iterator>. 迭代器类型 类型 能力 提供者 输入迭代器 一次向前读取 istream 输出迭代器 向前写入 ostream,inserter 前向迭代器 向前读取和写入 forward list,unordered containers 双向迭代器 向前和向后的读取和写入 list,set,multise

STL学习笔记(迭代器类型)

迭代器类型 迭代器是一种“能够遍历某个序列内的所有元素”的对象.它可以透过与一般指针一致的接口来完成自己的工作. 不同的迭代器具有不同的”能力“(行进和存取能力) Input迭代器 Input迭代器只能一次一个向前读取元素,按此顺序一个个传回元素值. 几乎所有迭代器都具备Input迭代器的能力,而且通常更强.纯粹Input迭代器的一个典型例子就是“从标准输入装置读取数据”的迭代器. 下表列出了Input迭代器的各种操作行为 Output迭代器 Output迭代器和Input迭代器相反,其作用是将

STL学习笔记(迭代器配接器)

Reverse(逆向)迭代器 Reverse迭代器是一种配接器. 重新定义递增运算和递减运算.使其行为正好倒置. 如果你使用这类迭代器,算法将以逆向次序处理元素.所有标准容器都允许使用Reverse迭代器来遍历元素.下面是个例子: 1 #include <iostream> 2 #include <list> 3 #include <algorithm> 4 using namespace std; 5 6 void print(int elem) 7 { 8 cout

STL学习笔记

这篇笔记暂时只是一部分,后续的部分会慢慢贴出来.有错误之处还望大神指教 1,容器 (1)vector vector要求<vector>的头文件包含,实际的实现是在<stl_vector.h>中. vector的初始化方式: 1,直接初始化空: vector():start(0),end(0),end_of_storage(0){}; ex: vector<int> vec; 2,初始化并赋值 vector<int/double/long/decimal/float

STL学习笔记(非变动性算法)

辅助函数 本节跟以后几节将对所有STL算法逐一详细讨论.为了简化这些例子,我们使用了一些辅助函数,分别用于对容器进行输出跟插入操作. for_each()算法 for_each()算法非常灵活,它可以以不同的方式存取.处理.修改每一个元素 UnaryProc for_each(InputIterator beg,InputIterator end,UnaryProc op); 1.对与区间[beg,end)中的每一个元素调用:op(elem) 2.返回op(已在算法内部被变动过)的一个副本 3.