STL的基本概念:

  1-容器:是可容纳各种类型的数据结构,是 类模板。

  2-迭代器:是用于依次存放容器中的元素,类似指针。

  3-算法: 是用于操作容器中元素的 函数模板。

       sort() 用来对 vector 中的数据进行排序。

       find() 用来搜索 list 中的对象。

      算法本身与他们操作的数据类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用。

如 int  a[100]:

  该数组就是容器,而int * 类型的指针变量就可以作为迭代器,sort算法可以作用在该容器上,对其排序:

  sort(a,a+50); //对前50个元素进行排序

容器种类:

  顺序容器: vector(数组) ,deque (双向队列),list(双向链表)

  关联容器:set ,multiset ,map ,multimap  // 都能对输入数据进行排序

  容器适配器: stack ,queue ,priority_queue

  PS:对象被插入容器中时,被插入的是对象的一个复制品。

容器 容器上的迭代器访问
vector 随机访问(通过下标就能取到元素)
deque 随机访问
list 双向(不能用下标取元素)
set/multiset 双向
map/multimap 双向
   
stack 不支持迭代器(元素只能在对头或对尾被访问)
queue 不支持迭代器
priority_queue 不支持迭代器

  如vector 的迭代器是随机迭代器,遍历vector可以有以下几种方法:

  

vector<int> v();
int i;
for (int i = ; i < v.size; ++i)
{
cout << v[i]; //根据下标随机访问
}
vector<int>::const_iterator it;
for(it = v.begin(); it != v.end(); ++it)
cout << *it;
for(it = v.begin(); it < v.end(); ++it)
cout << *it;

  

 list的迭代器是双向迭代器,正确遍历方法为:

list<int> v;
list<int>::const_iterator it;
for(it = v.begin(); it != end(); ++it)
cout << *it;

`  错误做法:

for(it = v.begin(); it < v.end(); ++it)
cout << *it;

for (int i = ; i < v.size; ++i)
cout << v[i];
//双向迭代器不支持 <,list没有[]成员函数

  

STL笔记的更多相关文章

  1. STL笔记(5)条款49:学习破解有关STL的编译器诊断信息

    STL笔记(5)条款49:学习破解有关STL的编译器诊断信息 条款49:学习破解有关STL的编译器诊断信息 用一个特定的大小定义一个vector是完全合法的, vector<int> v( ...

  2. STL笔记(3) copy()之绝版应用

    STL笔记(3) copy()之绝版应用 我选用了一个稍稍复杂一点的例子,它的大致功能是:从标准输入设备(一般是键盘)读入一些整型数据,然后对它们进行排序,最终将结果输出到标准输出设备(一般是显示器屏 ...

  3. STL笔记(1)map

    STL笔记(1)map STL之map ZZ from http://hi.baidu.com/liyanyang/blog/item/d5c87e1eb3ba06f41bd576cf.html 1. ...

  4. STL笔记(6)标准库:标准库中的排序算法

    STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew A ...

  5. STL笔记(4)关于erase,remove

    STL笔记(4)关于erase,remove 你要erase的元素很容易识别.它们是从区间的“新逻辑终点”开始持续到区间真的终点的原来区间的元素.要除去那些元素,你要做的所有事情就是用那两个迭代器调用 ...

  6. Effective STL 笔记 -- Item 6 ~ 7: Container and Object Pointer

    Effective STL 笔记 – Item 6 ~ 7: Container and Object Pointer 中间两次笔记被删掉了,简单补一下: Item 3 中提到如果将对象直接放入容器中 ...

  7. STL笔记(2) STL之父访谈录

    年3月,dr.dobb's journal特约记者, 著名技术书籍作家al stevens采访了stl创始人alexander stepanov. 这份访谈纪录是迄今为止对于stl发展历史的最完备介绍 ...

  8. C++STL笔记

    C++STL 1.vector 向量,长度可变的数组 头文件 #include<vector> 1.1vector的定义 vector<typename> name; 例如: ...

  9. STL 笔记(四) 迭代器 iterator

    stl 中迭代器能够理解为面向对象版本号的广义指针,提供了对容器中的对象的訪问方法,能够遍历容器全部元素.也能够訪问随意元素.stl 迭代器有下面五种: Input iterators   仅仅读,输 ...

随机推荐

  1. JavaScript中模块化工具require.js

    什么是require.js? RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.它还同时可以和其他的框架协同工作,使用RequireJS必将使您的前端代 ...

  2. androidcoookie

    https://segmentfault.com/a/1190000002877843 目前在操作登录的coookie,js和原生

  3. Math类中常用方法

    public static int abs(int a) , public static long abs(long a), public static float abs(float a),  pu ...

  4. Linux 虚拟机的计划维护

    Azure 定期执行更新,以提高虚拟机的主机基础结构的可靠性.性能及安全性. 此类更新包括修补宿主环境(例如操作系统.虚拟机监控程序以及主机上部署的各种代理)中的软件组件.升级网络组件以及硬件解除授权 ...

  5. Web API 2 入门——使用ASP.NET Web API和Angular.js构建单页应用程序(SPA)(谷歌翻译)

    在这篇文章中 概观 演习 概要 由网络营 下载网络营训练包 在传统的Web应用程序中,客户机(浏览器)通过请求页面启动与服务器的通信.然后,服务器处理请求,并将页面的HTML发送给客户端.在与页面的后 ...

  6. Oracle数据库设计实例-实时生产效率系统数据库设计

    Oracle数据库设计实例-实时生产效率系统数据库设计 引言 1.1 设计前提 某部门经理要求IT部门设计一个流水线实时生产效率系统,用来统计实时的生产量和效率.流水线有数百条,实时间隔为1min. ...

  7. February 4 2017 Week 5 Saturday

    It takes a great man to be a good listener. 懂得倾听的人才是真的了不起. Don't make comments before you have learn ...

  8. Java -- Arrays.asList()方法

    Arrays.asList() 是将数组作为列表 问题来源于: public class Test { public static void main(String[] args) { int[] a ...

  9. (一)自定义ImageView,初步实现多点触控、自由缩放

    真心佩服那些一直专注于技术共享的大神们,正是因为他们无私的分享精神,我才能每天都有进步.近日又算是仔细学了android的自定义控件技术,跟着大神的脚步实现了一个自定义的ImageView.里面涉及到 ...

  10. UVa 1331 - Minimax Triangulation(区间DP + 计算几何)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...