STL笔记
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笔记的更多相关文章
- STL笔记(5)条款49:学习破解有关STL的编译器诊断信息
STL笔记(5)条款49:学习破解有关STL的编译器诊断信息 条款49:学习破解有关STL的编译器诊断信息 用一个特定的大小定义一个vector是完全合法的, vector<int> v( ...
- STL笔记(3) copy()之绝版应用
STL笔记(3) copy()之绝版应用 我选用了一个稍稍复杂一点的例子,它的大致功能是:从标准输入设备(一般是键盘)读入一些整型数据,然后对它们进行排序,最终将结果输出到标准输出设备(一般是显示器屏 ...
- STL笔记(1)map
STL笔记(1)map STL之map ZZ from http://hi.baidu.com/liyanyang/blog/item/d5c87e1eb3ba06f41bd576cf.html 1. ...
- STL笔记(6)标准库:标准库中的排序算法
STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew A ...
- STL笔记(4)关于erase,remove
STL笔记(4)关于erase,remove 你要erase的元素很容易识别.它们是从区间的“新逻辑终点”开始持续到区间真的终点的原来区间的元素.要除去那些元素,你要做的所有事情就是用那两个迭代器调用 ...
- Effective STL 笔记 -- Item 6 ~ 7: Container and Object Pointer
Effective STL 笔记 – Item 6 ~ 7: Container and Object Pointer 中间两次笔记被删掉了,简单补一下: Item 3 中提到如果将对象直接放入容器中 ...
- STL笔记(2) STL之父访谈录
年3月,dr.dobb's journal特约记者, 著名技术书籍作家al stevens采访了stl创始人alexander stepanov. 这份访谈纪录是迄今为止对于stl发展历史的最完备介绍 ...
- C++STL笔记
C++STL 1.vector 向量,长度可变的数组 头文件 #include<vector> 1.1vector的定义 vector<typename> name; 例如: ...
- STL 笔记(四) 迭代器 iterator
stl 中迭代器能够理解为面向对象版本号的广义指针,提供了对容器中的对象的訪问方法,能够遍历容器全部元素.也能够訪问随意元素.stl 迭代器有下面五种: Input iterators 仅仅读,输 ...
随机推荐
- 【Python之搜索引擎】(一)概述
learning goal--search engine 1.Find datas - crawl 2.Index 3.page rank String操作 提取网络中的链接 Extracting a ...
- html select 操作备份
select动态添加option问题 JS操作:(未验证) 代码 var selid = document.getElementById("sltid"); for(var i=0 ...
- Linux 虚拟机虚拟网卡问题导致无法连接问题
问题描述 当 Linux 虚拟机启动时,通过串口输出或者启动日志, 观察到虚拟网卡启动或者初始化故障, 导致虚拟机无法连接. 问题分析 常见的超时报错范例如下: CentOS 复制 Bringing ...
- HTML5时代的纯前端上传图片预览及严格图片格式验证函数(转载)
原文地址:http://www.2cto.com/kf/201401/274752.html 一.要解决什么样的问题? 在写这个函数之前,有们童鞋在群里问如何纯前端严格验证图片格式.这在html5时代 ...
- C# 操作Excel 格式
数字(Range.NumberFormatlocal 属性)常规:Range.NumberFormatlocal = "G/通用格式"数值:Range.NumberFormatlo ...
- 使用nodejs代码在SAP C4C里创建Individual customer
需求:使用nodejs代码在SAP Cloud for Customer里创建Individual customer实例. 代码: var createAndBind = require('../je ...
- maven构建报错org.apache.maven.lifecycle.LifecycleExecutionException
2017年06月04日 15:03:10 阅读数:7991 maven构建报错 org.apache.maven.lifecycle.LifecycleExecutionException: Fail ...
- [零基础学JAVA]Java SE基础部分-04. 分支、循环语句
转自:http://redking.blog.51cto.com/27212/116751 1.课程名称:分支.循环 本季为JAVA程序中最重要的部分,在讲解的时候除了讲解各种主要的控制语句(分支语句 ...
- Microsoft Visual C++ 2005 Redistributable 无法卸载问题解决办法
今日遇到一个问题,Microsoft Visual C++ 2005 Redistributable 无法卸载,弹出的对话框如下所示: 试了一些网上的方法,比如下载vcredist_x86.exe,解 ...
- yii 使用小技巧
1.db组件 'schemaCachingDuration'=>3600, 为什么不起做用? 需要开缓存 2.如何在页面下边显示sql的查询时间,在log组件的routes中加入 array( ...