c++ 顺序容器学习
所谓容器,就是一个装东西的盒子,在c++中,我们把装的东西叫做“元素”
而顺序容器,就是说这些东西是有顺序的,你装进去是什么顺序,它们在里面就是什么顺序。
c++中的顺序容器一共有这么几种:
| vector | 可变大小数组 |
| deque | 双端队列 |
| list | 双向链表 |
| forward_list | 单向链表 |
| array | 固定数组大小 |
| string | 与vector相似的容器,但专门用于保存字符 |
这些容器可以让我们方便地放元素,取元素,but,她们在:添加、删除、非顺序访问,这些方面的性能都是不同滴(根据需要适当选择)
列了一大堆,就是为了有个印象,不知道她们是干啥的,后面慢慢学...
先不要逐个的去学,我们先来看一下共性的东西,下面是所有容器类型都提供的操作
| 类型别名 | |
| iterator | 迭代器 |
| const_iterator | 只读迭代器 |
| size_type | unsigned int,保证可以存下此种容器的最大可能长度 |
| difference_type | int, 足够保存两个迭代器之间的距离,是有符号的 |
| value_type | 元素类型 |
| reference | 元素的左值类型,即value_type& |
| const_reference | 即const value_type & |
| 构造函数 | |
| C c | 默认构造函数,构造空容器 |
| C c1(c2) | 构造了c1,内容是拷贝c2的 |
| C c(b, e) | 构造c,将迭代器b和e指定的范围内的元素拷贝到c |
| C c{a, b, c...} | 列表初始化c |
| 赋值与swap | |
| c1 = c2 |
将c1中的元素替换为c2中的元素 |
| c1 = {a,b,c...} | 将c1中的元素替换为列表中的元素(array不适用) |
| a.swap(b) | 交换a,b的元素 |
| 大小 | |
| c.size() |
c中元素的数目(forward_list不适用) |
| c.max_size() | c可保存的最大元素数目 |
| c.empty() | c是否为空,空true,不空false |
| 添加/删除元素 | |
| c.insert(args) | 将args中的元素拷贝进c |
| c.emplace(inits) | 使用inits构造c中的一个元素 |
| c.erase(args) | 删除args指定的元素 |
| c.clear() | 删除c中的所有元素,返回void |
| 关系运算符 | |
| ==, != | 是否相等,是否不等 |
| <, <=, >. >= | 关系运算符 |
| 获取迭代器 | |
| c.begin(), c.end() | 获取首元素,尾元素之后位置,的迭代器 |
| c.cbegin(), c.cend() | 返回const_iterator |
| 反向容器的额外成员 | |
| reverse_iterator | 反着寻址的迭代器 |
| const_reverse_interator | 只读的逆序迭代器 |
| c.rbegin(), c.rend() | 尾元素,首元素之前的迭代器 |
| c.crbegin(), c.crend() | 返回const_reverse_iterator |
好多...我都敲晕乎了
先有蛋才有鸡,首先我们来看“构造函数",一共分这么几种:
(1) 默认初始化; (2) 拷贝初始化; (3) 列表初始化; (4) 迭代器初始化; (5) 顺序容器特有初始化
用vector做个栗子,代码如下:
#include <iostream>
#include <vector> using namespace std; int main()
{
vector<int> vec1; //默认初始化
vector<int> vec2{,,,}; //列表初始化
vector<int> vec3{,,,};
vec3 = vec2;
vector<int> vec4(vec3); //拷贝初始化
vector<int> vec5(vec4.begin()+, vec4.end()-); //迭代器初始化
vector<int> vec6(,); //顺序容器特有初始化
return ;
}
seq_container_definition
执行结果gdb看一下:

好,然后我们来看一下迭代器,以及begin()和end()
迭代器和指针差不多,反正就是让我们来遍历着访问元素的,begin()取到第一个元素,end()取到?尾元素的后一个位置(one past the last element)
下面贴个snippet来看她的使用:
#include <iostream>
#include <string> using namespace std; int main()
{
string s("time for lunch");
string::iterator iter = s.begin();
while(iter != s.end()){
*iter = toupper(*iter);
iter++;
}
cout << s << endl;
return ;
}
seq_container_iterator
注意一点就是:如果你往容器对象里添加或者删除了元素,也即改变了对象容量,那么对象上原有的迭代器就会失效
c++ 顺序容器学习的更多相关文章
- c++ 顺序容器学习 - 容器适配器
摘要: 对 容器适配器 的疑问. 刚开始接触 容器适配器 时,总感觉怪怪的,认为多此一举,顺手搜了搜,原来我在这一点is not alone: STL容器适配器的用途 其中有个老兄说的好,这里 引用一 ...
- C++学习基础四——顺序容器和关联容器
—顺序容器:vector,list,queue1.顺序容器的常见用法: #include <vector> #include <list> #include <queue ...
- C++系统学习之九:顺序容器
元素在顺序容器中的顺序与其加入容器时的位置相对应.关联容器中元素的位置由元素相关联的关键字值决定.所有容器类都共享公共的接口,不同容器按不同方式对其进行扩展. 一个容器就是一些特定类型对象的集合.顺序 ...
- 【c++ Prime 学习笔记】第9章 顺序容器
一个容器是特定类型对象的集合 顺序容器中元素的顺序与其加入容器的位置对应 关联容器中元素的顺序由其关联的关键字决定,关联容器分为有序关联容器和无序关联容器 所有容器类共享公有接口,不同容器按不同方式扩 ...
- c/c++ 标准顺序容器 容器的访问,删除 操作
c/c++ 标准顺序容器 容器的访问,删除 操作 pop_front:vector,string不支持 pop_back:forward_list不支持 知识点 1,front, back, at 成 ...
- c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作
c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作 关键概念:向容器添加元素时,添加的是元素的拷贝,而不是对象本身.随后对容器中元素的任何改变都 ...
- C++拾遗(四)——顺序容器
之前一篇博文(<初窥标准库>)简单了解了一种最常用的顺序容器:vector类型.本文将对该文内容进行进一步的学习和完善,继续讨论标准库提供的顺序容器类型.所谓顺序容器,即将单一类型的元素聚 ...
- Java容器学习——List
Java容器学习--List 基础知识 数组: 优点:随机存取,可以快速访问元素 缺点:静态分配内存,存在空间闲置或者溢出现象:不适合进行插入和删除操作,需要移动大量元素. 链表: 优点: ...
- C++ 顺序容器基础知识总结
0.前言 本文简单地总结了STL的顺序容器的知识点.文中并不涉及具体的实现技巧,对于细节的东西也没有提及.一来不同的标准库有着不同的实现,二来关于具体实现<STL源码剖析>已经展示得全面细 ...
随机推荐
- discuz后台登陆 口令卡添加
1.通过根目录文件admin.php 找到 $admincp->init(); 2.指向 dz/source/class/discuz/discuz_admincp.php 这个方法funct ...
- 在代码设置RelativeLayout的属性,比如layout_below
( (RelativeLayout.LayoutParams)holder.ivLvDivider.getLayoutParams()).addRule(RelativeLayout.BELOW, R ...
- wampServer安装注意
http://www.glbwl.com/wampServer-403-forbidden.html http://jingyan.baidu.com/article/e75aca8578147d14 ...
- PDF 补丁丁 0.5.0.2731 发布(增加去除页面表单和链接水印功能)
新的版本增加了简单的删除表单和链接批注的功能,使用该功能可去掉某些软件打上的水印. 在 PDF 文档选项中选中“清除页面所有表单”和“清除页面所有链接批注”项后,程序将会删除页面的表单和链接批注. 效 ...
- blade and soul races guide
Race Four races are available for those who wish to choose the path of martial arts: the careful Gon ...
- Go语言开发环境配置
一.我为什么要学习go语言 当今已经是移动和云计算时代,Go出现在了工业向云计算转型的时刻,简单.高效.内 置并发原语和现代的标准库让Go语言尤其适合云端软件开发(毕竟它就是为此而设计的).到2014 ...
- Selenium的延迟等待
http://my.oschina.net/u/928852/blog/98885 Selenium的延迟等待分为 显式等待(Explicit Wait) & 隐式等待(Implicit Wa ...
- qt 单文档程序关闭时在delete ui处出现segmentation fault
做了个显示图片的单文档程序. qt 单文档程序关闭时在delete ui处出现segmentation fault. 调试发现调用两次mainwindow析构函数. http://blog.csdn. ...
- 一个有趣的回答(摘自http://www.51testing.com/html/03/n-860703.html)
假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些.从算法上讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有? 比如,如果是下面两个字符串: S ...
- ios之JavaScript
初次接触java脚本,感觉java脚本so interesting!为什么呢?写javascript代码感觉就像是在记流水账,无拐弯抹角,一个字,就是"干",想怎么干就怎么干,哈哈 ...