随笔分类 -  STL

STL常用技巧.
摘要:1比如:vector vecID; 中保存了m个ID,这时要删除第n个ID。遍历是一个方法;即vector::itertor it = vecID.begin(); 然后++it n次。更好的方法是:vector::itertor it = vecID.begin() + n; vector的迭代器直接支持这种偏移。然后用vecID.erase(it)方法 删除该元素。2.去除一个容器中有特定值的所有对象1)如果容器是vector、string或deque,使用erase-remove惯用法,例如c.erase(remove(c.begin(), c.end(), 1963),c.end()) 阅读全文
posted @ 2011-05-31 18:02 maxweii 阅读(424) 评论(0) 推荐(0)
map按值排序
摘要:在STL中,map是按键来排序的,但很多时候需要按值来排序。一种方法是将map转化为vector,然后排序。(#add 此法缺点为 map内容没变,而是整个的传给vector了,之后所要用的是vector.或许也不能说是缺点.)另一个好的方案是 同时做一个反向的map,与之前的map,key value反过来存储.tool.h#ifndef TOOL_H#define TOOL_H#include <iostream>#include <vector>#include <map>#include <string>#include <algo 阅读全文
posted @ 2011-04-22 00:13 maxweii 阅读(1329) 评论(0) 推荐(0)
函数对象/仿函数
摘要:提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法。容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的基本算法,迭代器是由容器提供的一种接口,算法通过迭代器来操控容器。接下来要介绍的是另外的一种组件,函数对象(Function Object,JJHou译作Functor仿函数)。 什么是函数对象 顾名思义,函数对象首先是一个对象,即某个类的实例。其次,函数对象的行为和函数一致,即是说可以像调用函数一样来使用函数对象,如参数传递、返回值等。这种行为是通过重载类的()操作符来实现的,举例说明之,cla 阅读全文
posted @ 2011-02-16 23:48 maxweii 阅读(3388) 评论(1) 推荐(0)
STL中常用的一些算法函数[持续更新
摘要:1 merge 归并 将两个数组合并成一个(有序) merge(iarray1,iarray+len1,iarray2,iarray2+len2,result); 升序 merge(iarray1,iarray+len1,iarray2,iarray2+len2,result,greater<int>()); 降序2 reverse 元素反向 reverse(iarray,iarray+len1);3 reverse_copy 元素反向复制 reverse(iarray,iarray+len,iarray_new); 复制到新的数组中3 unique 剔除连续重复元素 ,剔除后元素 阅读全文
posted @ 2011-02-16 23:30 maxweii 阅读(807) 评论(0) 推荐(0)
神秘的auto_ptr
摘要:作者:winterTTr(转载请注明) 资料来源:《STL标准库》为什么说它神秘呢,那好吧,我可以换一个更直白的词语,那就是“陷阱重重”。对于不了解auto_ptr的人来说,使用它就是一种灾难,而避免这种灾难,就必须揭开它神秘的面纱,了解其内部运作机制。为什么要出现auto_ptr view plaincopy to clipboardprint?void f() { ClassA* ptr = new ClassA; //create an object explicitly ...; //perform some operations delete ptr; //clean up ( 阅读全文
posted @ 2011-01-24 15:20 maxweii 阅读(332) 评论(0) 推荐(0)
CArray,CList,CMap如何实化
摘要:1、定义一个CMap,向这个CMap中增加数据项(键-值对)。CMap<CString, LPCTSTR, CString, LPCTSTR>m_ItemMap;CString strKey = _T(""), str = _T("");int i;for(i = 0; i < 5; i++) { strKey.Format("%d", i); //这个是键 str.Format("A%d", i); //键对应的值 m_ItemMap.SetAt(strKey, str); }2、遍历整个CMa 阅读全文
posted @ 2011-01-20 14:11 maxweii 阅读(1233) 评论(0) 推荐(0)
List学习指南
摘要:什么是STL呢?STL就是Standard Template Library,标准模板库。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。 STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什麽。它被内建在你的编译器之内。因为STL的list是一个简单的容器,所以我打算从它开始介绍STL如何使用。如果你懂得了这个概念,其他的就都没有问题了。另 阅读全文
posted @ 2011-01-18 20:46 maxweii 阅读(303) 评论(0) 推荐(0)
hash_map详解
摘要:详细解说STL hash_map系列 来源于http://www.stlchina.org/0 为什么需要hash_map 用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改: 岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方法就是取得所有的记录,然后按照名字一个一个比较。如果要速度快,就需要把这些记录按照字母顺序排列,然后按照二分法查找 阅读全文
posted @ 2011-01-18 20:38 maxweii 阅读(400) 评论(0) 推荐(0)
STL 中map 用法详解
摘要:一.Map 概述Map 是STL 的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map 中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map 内部数据的组织,map 内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map 内部所有的数据都是有序的,后边我们会见识到有序的好处。下面举例说明什么是一对一的数据映射。比如一个班级中,每个学生的学号跟他的姓名就存在着一一映射的关系,这个模型用map 可能轻易描述,很明显学号用int 描述,姓名 阅读全文
posted @ 2011-01-10 15:03 maxweii 阅读(502) 评论(0) 推荐(0)