迭代器是一个行为类似于指针的模板类对象.只需要迭代器iter指向一个有效对象,就可以通过使用*iter解引用的方式来获取一个对象的引用.通常会使用一对迭代器来定义一段元素,可以是任意支持迭代器对象的元素,一段元素是一个通过起始迭代器指向第一个元素,通过结束迭代器指向最后一个元素的后一个位置的元素序列.一般使用std::begin()和std::end()来获取容器的迭代器. #include <numeric> #include <iostream> #include <it…
std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #include <iostream> #include <vector> #include <algorithm> #include <map> #include <boost/format.hpp> #include <boost/cstdin…
1 迭代器 Iterators 5种迭代器类型 随机访问迭代器: vector, deque, array // 允许的操作 vector<int> itr; itr = itr + 5; // itr往前移5步 itr = itr - 4; if (itr2 > itr1) ... ++itr; // 前置的比后置的快 --itr; 双向迭代器: list, set/multiset, map/multimap // 允许的操作 list<int> itr; ++itr;…
C++ STL中迭代器(iterators)用于遍历对象集合的元素.由于容器大小随着插入删除等操作动态改变,无法像静态数组那样获取数组长度然后遍历容器里的所有元素:这时就需要迭代器,每次从容器内第一个元素遍历,直到迭代器等于容器的尾迭代器.这些集合可能是容器,也可能是容器的子集.迭代器按照定义方式分成以下四种. 1) 正向迭代器,定义方法如下: 容器类名::iterator 迭代器名; 2) 常量正向迭代器,定义方法如下: 容器类名::const_iterator 迭代器名; 3) 反向迭代器,…
从deque到std::stack,std::queue,再到iOS 中NSArray(CFArray) deque deque双端队列,分段连续空间数据结构,由中控的map(与其说map,不如说是数组)控制,map中每个槽指向一个固定大小的缓冲(连续的线性空间). deque的迭代器,关键的四个指针: cur //所指缓冲区中的现元素 first //所指缓冲区中的头 last //所指缓冲区中的尾 node //指向中控的槽 start指向中控第一个槽位的buffer中的第一个元素,fini…
在开始讲迭代器之前,先列举几个例子,由浅入深的来理解一下为什么要设计迭代器. //对于int类的求和函数 int sum(int *a , int n) { int sum = 0 ; for (int i = 0 ; i < n ; i++) { sum += *a++; } return sum; } //对于listNode类的求和函数 struct ListNode { int val; ListNode * next; }; int sum(ListNode * head) { int…
1 头文件 所有容器有含有其各自的迭代器型别(iterator types),所以当你使用一般的容器迭代器时,并不需要含入专门的头文件.不过有几种特别的迭代器,例如逆向迭代器,被定义于<iterator>中. 2 迭代器类型 迭代器共分为五种,分别为: Input iterator.Output iterator.Forward iterator.Bidirectional iterator.Random access iterator. 2.1 Input(输入)迭代器 只能一次一个向前读取…
1. 定义反向迭代器(Reverse Iterator)是一种反向遍历容器的迭代器.也就是,从最后一个元素到第一个元素遍历容器.反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问前一个元素,而--运算则访问下一个元素.2. 作用(1)反向迭代器需要使用自减操作符:标准容器上的迭代器(reverse_iterator)既支持自增运算,也支持自减运算.但是,流迭代器由于不能反向遍历流,因此流迭代器不能创建反向迭代器.(2)可以通过reverse_iterator::base()…
C++11:基于std::queue和std::mutex构建一个线程安全的队列 C++中的模板std::queue提供了一个队列容器,但这个容器并不是线程安全的,如果在多线程环境下使用队列,它是不能直接拿来用的. 基于它做一个线程安全的队列也并不复杂.基本的原理就是用std::mutext信号量对std::queue进行访问控制,以保证任何一个线程都是独占式访问,下面是完整的代码. /* * threadsafe_queue.h * * Created on: 2016年7月26日 * Aut…
Undefined symbols for architecture i386: “_OBJC_CLASS_$_XXX”, referenced from: objc-class-ref in XXX ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)   如果真机调试就是 undefined sy…