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 仅仅读,输 ...
随机推荐
- 怎样修改织梦网站的favicon图标
现在很多的网站浏览器栏上都有favicon图标,比如百度,大家用织梦做好网站后,可能发现自己的网站favicon图标默认的不好看,如何修改织梦网站的favicon导航图标呢,很多人肯定有过困惑,小编遇 ...
- MySQL创建子视图并查看的时候,字符集报错问题
进入命令行模式, 如果MySQL数据库已经安装好,可以使用下列SQL命令查看MySQL当前的字符集设置: mysql> show variables like 'character_set_%' ...
- CentOS 7运维管理笔记(11)----解决配置静态IP还是会出现动态IP地址的问题
网上搜集CentOS7 配置静态IP的方法,基本上都是说在 /etc/sysconfig/network-scripts/ifcfg-eth0文件中做如下配置 TYPE=Ethernet HWADDR ...
- Incorrect string value: '\xE8\xAF\xAD\xE6\x96\x87' for column 'name' at row 1
报错的原因就是在执行插入时对Name这个字段被赋予了错误的字符串值:’\xE4\xB8\xAD\xE6\x96\x87’ 实际上就函数里面的变量接收到的值编码格式跟它定义的不一致. 使用navicat ...
- oracle大量数据删除
oracle有个数据表现在已经有2500万条数据了,软件用到这个表的数据时就变的特别慢,所以准备把一个月以前的数据全部清除. 我的步骤是(下边操作都是在plsql中运行的) 1.首先 将这个月的数据导 ...
- mssql删除数据库、删除帐号错误解决方法
1. 删除数据库或者恢复数据库时,一定要先将数据库离线,在执行删除.恢复操作. SQL代码如下: /*使数据库离线*/ ALTER DATABASE [数据库名] SET OFFLINE WITH R ...
- GPDB 5.x PSQL Quick Reference
General \copyright show PostgreSQL usage and distribution terms \g [FILE] or ; execute query (and se ...
- MyEcplise的注册代码
代码分析 package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...
- January 24 2017 Week 4 Tuesday
Fashion changes, but style endures. 时尚会变迁,但风格会永恒. Please develop my personal style, in this way I ca ...
- HttpServletRequest的随手记
request对象的三个主要的方法: getParameter(String name):获取请求参数名字对应的参数值.只获取一个.如果名字对应有多个参数值的话,那么只会获取参数数组中的第一个.比如一 ...