所谓容器,就是一个装东西的盒子,在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++ 顺序容器学习的更多相关文章

  1. c++ 顺序容器学习 - 容器适配器

    摘要: 对 容器适配器 的疑问. 刚开始接触 容器适配器 时,总感觉怪怪的,认为多此一举,顺手搜了搜,原来我在这一点is not alone: STL容器适配器的用途 其中有个老兄说的好,这里 引用一 ...

  2. C++学习基础四——顺序容器和关联容器

    —顺序容器:vector,list,queue1.顺序容器的常见用法: #include <vector> #include <list> #include <queue ...

  3. C++系统学习之九:顺序容器

    元素在顺序容器中的顺序与其加入容器时的位置相对应.关联容器中元素的位置由元素相关联的关键字值决定.所有容器类都共享公共的接口,不同容器按不同方式对其进行扩展. 一个容器就是一些特定类型对象的集合.顺序 ...

  4. 【c++ Prime 学习笔记】第9章 顺序容器

    一个容器是特定类型对象的集合 顺序容器中元素的顺序与其加入容器的位置对应 关联容器中元素的顺序由其关联的关键字决定,关联容器分为有序关联容器和无序关联容器 所有容器类共享公有接口,不同容器按不同方式扩 ...

  5. c/c++ 标准顺序容器 容器的访问,删除 操作

    c/c++ 标准顺序容器 容器的访问,删除 操作 pop_front:vector,string不支持 pop_back:forward_list不支持 知识点 1,front, back, at 成 ...

  6. c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作

    c/c++ 标准顺序容器 之 push_back,push_front,insert,emplace 操作 关键概念:向容器添加元素时,添加的是元素的拷贝,而不是对象本身.随后对容器中元素的任何改变都 ...

  7. C++拾遗(四)——顺序容器

    之前一篇博文(<初窥标准库>)简单了解了一种最常用的顺序容器:vector类型.本文将对该文内容进行进一步的学习和完善,继续讨论标准库提供的顺序容器类型.所谓顺序容器,即将单一类型的元素聚 ...

  8. Java容器学习——List

    Java容器学习--List 基础知识 数组: ​ 优点:随机存取,可以快速访问元素 ​ 缺点:静态分配内存,存在空间闲置或者溢出现象:不适合进行插入和删除操作,需要移动大量元素. 链表: ​ 优点: ...

  9. C++ 顺序容器基础知识总结

    0.前言 本文简单地总结了STL的顺序容器的知识点.文中并不涉及具体的实现技巧,对于细节的东西也没有提及.一来不同的标准库有着不同的实现,二来关于具体实现<STL源码剖析>已经展示得全面细 ...

随机推荐

  1. C# in depth学习(1)

    第一章,C#开发的进化史 1.简单数据类型 2.排序 Sorting an ArrayList using IComparer (C# 1) Sorting a List<Product> ...

  2. 自定义刷新tableView

    // //  LSTWholeTableController.m //  BUDEJIE // //  Created by admin on 16/8/17. //  Copyright © 201 ...

  3. Git 配置

    在 windows 上安装完 Git 会右键菜单中看到 Git 的快捷打开选项, 点 Git Bash Here 就可以在当前目录下打开 Git 的命令行 Git shell,初次使用 Git 先配置 ...

  4. μC/OS-Ⅲ系统的任务挂起表

    在μC/OS-Ⅲ系统中任务挂起表与任务就续表十分相似,只不过任务就续表记录就绪状态的任务,任务挂起表记录等待某个内核对象的任务.任务挂起表是一个类型为OS_PEND_LIST的数据结构,包含三个成员: ...

  5. bzoj 3172 单词 ac自动机|后缀数组

    题目大意: 给定n个字符串连成了一篇文章,问每个字符串在这篇文章中出现的次数,可重复覆盖 这里ac自动机和后缀数组都可以做 当然后缀数组很容易就解决,但是相对时间消耗高 这里就只讲ac自动机了 将每个 ...

  6. 笔记:linux下mysql设置utf-8编码方法

    一:查看mysql版本 1.1 mysql –V 在终端界面输入上面命令.显示如下: mysql Ver 14.14 Distrib 5.5.35, fordebian-linux-gnu (x86_ ...

  7. [转]显卡帝揭秘3D游戏画质特效

    显卡帝揭秘3D游戏画质特效 近几年来,大量采用最新技术制作的大型3D游戏让大部分玩家都享受到了前所未有的游戏画质体验,同时在显卡硬件方面的技术革新也日新月异.对于经常玩游戏的玩家来说,可能对游戏画质提 ...

  8. C++与Java的语法区别

    C++与Java的语法区别 首先,两个大的不同是主函数和怎样编译的不同,接下来是许多小的区别. main 函数C++//自由浮动的函数int main( int argc, char* argv[]) ...

  9. Command Pattern

    当(客户)对象访问(服务)请求服务时,最直接的方法就是方法调用.

  10. Ext JS 4 新特性2:配置项属性(config)之一

    Ext JS 4 新特征2:配置项属性config 最新版本的Ext JS 4.2的另外一个伟大的新特征就是增加了configuration配置项属性,当我们在创建一个新类的时候,经常性的要设置某某属 ...