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源码剖析>已经展示得全面细 ...
随机推荐
- POJ 2528 Mayor's posters
Mayor's posters Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- ORACLE 连接SQLSERVER 数据库备忘
最近工作需要,要从SQL SERVER数据库中同步提取数据. 这里采用了 Oracle Gateway 来连接,折腾了半天,终于搞定,记录下已备下次使用. 基本资料网上都可以搜很多,官网配置说明在这 ...
- CentOS vsftpd搭建快速流程
1.yum install vsftpd 2.chkconfig vsftpd on 3.service vsftpd start 4.adduser -d /home/bp -g ftp -s /s ...
- java map的默认排序问题
import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Tre ...
- windows C input 注意
windows控制台输入,默认是以文本模式打开,即使重定向输入,文本模式不变,所以输入时无法读到cr,因为windows已经把crlf转换成单个lf. 如果freopen("CON" ...
- 数据加密标准——DES
DES算法和DESede算法统称DES系列算法.DES算法是对称加密算法领域中的典型算法,为后续对称加密算法的发展奠定了坚实的基础.但是DES算法密钥偏短,仅有56位,迭代次数偏少,受到诸如查分密码分 ...
- CSS各类标签用法——选择器
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- git branch(git 的branch 使用方法)
查看分支: $ git branch 该命令会类出当先项目中的所有分支信息,其中以*开头的表示当前所在的分支.参数-r列出远程仓库中的分支,而-a则远程与本地仓库的全部分支. 创 ...
- leetcode6
好吧,今天晚上赶项目确实是做不了三道题目了,最近项目在网络编程方面有些进步,学到了东西,有时间再积累下来,很深的体会就是,和别人一起写代码,虽然蛋疼但是比自己一个人写要好点,不过发现自己对链表和排序什 ...
- Bootstrap<基础二十> 标签
Bootstrap 标签.标签可用于计数.提示或页面上其他的标记显示.使用 class .label 来显示标签,如下面的实例所示: <!DOCTYPE html> <html> ...