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 仅仅读,输 ...
随机推荐
- VStudio2015 开发MD风格的windows软件(附上使用第三方库教程)
MD就是Google的一个安卓5.0+好看界面,都知道win下没有,那么就有大牛弄出了C#版的MD 特别说明:开发环境是.net 4.6 下面开始教程喂! 新建一个工程,这些不要我说了吧,如果没一点基 ...
- 获取当前时间CTime
std::string getcurtime(){ USES_CONVERSION; CTime z_CurTime; CString z_TimeStr; z_CurTime = CTime::Ge ...
- create-react-native-app
create-react-native-app官网介绍链接,github文档,可以看看了解一下,总之是一个5分钟快速搭建react native项目并能看到效果的方法. 假设你已经安装了Node,你可 ...
- ubuntu配置(娱乐工作)
因为目前没有使用ubuntu作为工作的电脑(mac还是好用),所以暂时记录一下别人分享的ubuntu常用软件: 输入法:搜狗输入法 虚拟机:virtualbox 浏览器:chromium ide:id ...
- C++文件操作:打开文件和写入文件 zz
http://www.weixueyuan.net/view/5825.html 如果程序的运行结果仅仅显示在屏幕上,当要再次查看结果时,必须将程序重新运行一遍:而且,这个结果也不能被保留. 如果希望 ...
- LeetCode总结 -- 一维动态规划篇
这篇文章的主题是动态规划, 主要介绍LeetCode中一维动态规划的题目, 列表如下: Climbing StairsDecode WaysUnique Binary Search TreesMaxi ...
- Long Wei information technology development Limited by Share Ltd interview summary.
Long Wei information technology development Limited by Share Ltd interview summary. I take part in c ...
- linux 用户切换 标签: linux 2016-07-30 13:57 144人阅读 评论(0) 收藏
一.指令修改 1.普通用户切换到root用户: su root 需要输入密码 2.root用户切换到普通用户: su 用户名 不需要输入密码 二.直接注销,再用新用户登录 注:1.两种方式存在差别,用 ...
- mongoDB 固定集合(capped collection)
固定集合(Capped Collection)是一种尺寸固定的“循环”集合,可提供高效的创建.读取.删除等操作.这里所指的“循环”的意思是,当分配给集合的文件尺寸耗尽时,就会自动开始删除最初的文档,不 ...
- hdu-1395 2^x mod n = 1---求阶(欧拉函数)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1395 题目大意: 题目中给出输入一个整数n,要求一个最小整数的x,使得2^x mod n=1; 解题 ...