STL find() ,还是挺重要的】的更多相关文章

template<class InputIterator, class T> InputIterator find (InputIterator first, InputIterator last, const T& val) { while (first!=last) { if (*first==val) return first; ++first; } return last; } http://www.cplusplus.com/reference/algorithm/find/…
dijkstra的stl实现(最近觉得挺方便的 stl可作为跳板 --- Rujia liu struct node { int dis, id; node(int dis = 0, int id = 0) : dis(dis), id(id) {} bool operator < (const node& xx) const { return dis > xx.dis; } }; struct Edge{ int x,y,val; Edge(int x = 0, int y = 0,…
C++中的STL(Standard Template Library)用起来挺方便的,这里我们来做一下总结. 一.set set是STL中一种标准关联容器 (vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用 平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高. 在set中元素都是唯一的,而且默认情况下会对元素 自动进行升序排列,支持集合的交(s…
首先来看看vector的模板声明: template <class T, class Alloc = allocator<T>> class vector { //… }; vector接受2个模板参数,其中分配器属于默认参数,当然如果你想使用其他分配器话,得把2个参数都写出来,一般只需写入元素类型即可进行vector模板的实例化,如: vector<int> vec; vector属于序列式容器.所谓序列式容器,其中的元素都可序,但未必有序.vector与array其…
最近的一个项目中遇到了调用别人的sdk接口(dll库)而传给我的是一个vector指针,用完之后还要我来删除的情况.这个过程中首先就是在我的exe中将其vector指针转为相应指针再获取vector中相应的数据问题,始终都获得不了正确的数据,要么就是一些非法的数据:另一个问题就是delete这个指针时候会产生相应异常(针对这个问题的思考:如果EXE和DLL都链接到DLL的C/C++运行期库,那么代码将能够很好地运行.但是,如果两个模块中的一个或者两个链接到静态C/C++运行期库,那delete的…
本文面向的读者:学习过C++程序设计语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者.这实际上是我学习STL的一篇笔记,老鸟就不用看了. 什么是泛型程序设计 我们可以简单的理解为:使用模板的程序设计就是泛型程序设计.就像我们我们可以简单的理解面向对象程序设计就是使用虚函数的程序设计一样. STL是什么 作为一个C++程序设计者,STL是一种不可忽视的技术.Sandard Template Library (STL): 标准模板库,更准确的说是 C++ 程序设计语言标…
简单来将,仿函数(functor)就是一个重载了"()"运算符的struct或class,利用对象支持operator()的特性,来达到模拟函数调用效果的技术. 我们平时对一个集合类遍历的时候,例如vector,是这样做的: for(vector<int>::const_iterator iter = ivec.begin(); iter != ivec.end(); ++iter) { //do your whatever you want here } 例如下面的代码:…
STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)构成的. 对应于它们所支持的操作,共有五种 iterators(迭代器). input output \ / forward | bidirectional | random access 要注意,上面这图表并不是表明它们之间的继承关系:而只是描述了迭代器的种类和接口.处于图表下层的迭代器都是相对于处于图表上层迭代器的扩张集.例如:forward迭代器不但拥有…
两个连在一起的序列 [first, middle) 和 [middle, last) 都已经排序, 归并排序最核心的算法就是 将 [first, middle) 和 [middle, last) 在 O(N)时间内合并成一个有序数组. 但是合并的过程中一般需要  m + n 的额外辅助空间.其中, m . n 是数组的左右半边的长度. 现在假如, 1〉 辅助空间 bufSize < m + n 呢, 但是比 min(m, n) 大.也就是说能够容纳序列1 或者 序列 2. 2〉 bufSize…
智能指针实际上是一个类(class),里面封装了一个指针.它的用处是啥呢? 指针与内存 说到指针自然涉及到内存.我们如果是在堆栈(stack)中分配了内存,用完后由系统去负责释放.如果是自定义类型,就会自动的去调用你的析构函数. 但如果是在堆(heap)中分配了内存,也就是用malloc或者new.那只能自动手动的使用free或delete去释放.所以使用heap时处理的不好很容易出现啥内存泄露(内存没有释放掉).或者如果你delete一次了,但没让它赋值为0,然后再delete一次就导致未定义…