C++学习基础四——顺序容器和关联容器
—顺序容器:vector,list,queue
1.顺序容器的常见用法:
#include <vector>
#include <list>
#include <queue>
(1)vector声明
vector<string> svec;
(2)添加元素:
| c.push_back(t): 在容器 c 的尾部添加值为 t 的元素。返回 void 类型 |
| c.push_front(t):在容器 c 的前端添加值为 t 的元素。返回 void 类型 只适用于 list 和 deque 容器类型. |
| c.insert(p,t):在迭代器 p 所指向的元素前面插入值为 t 的新元素。返回 指向新添加元素的迭代器 |
| c.insert(p,n,t):在迭代器 p 所指向的元素前面插入 n 个值为 t 的新元素。 返回 void 类型 |
| c.insert(p,b,e):在迭代器 p 所指向的元素前面插入由迭代器 b 和 e 标记 的范围内的元素。返回 void 类型 |
(3)访问元素:
| c.back():返回容器 c 的最后一个元素的引用。如果 c 为空,则该操作 定 义 |
| c.front():返回容器 c 的第一个元素的引用。如果 c 为空,则该操作 定义 |
| c[n]:返回下标为 n 的元素的引用。如果 n <0 或 n >= c.size(),则该操作只适用于 vector 和 deque 容器 |
| c.at(n)返回下标为 n 的元素的引用。如果下标越界,则该操作只适用于 vector 和 deque 容器 |
(4)删除元素:
| c.erase(p)删除迭代器 p 所指向的元素。返回一个迭代器,它指向被删除元素后面的元素。如果 p 指向 容器内的最后一个元素,则返回的迭代器指向容器的超出 端 的下一位置。如果 p 身就是指向超出 端的下一位置的迭代 器。 |
| c.erase(b,e):删除迭代器 b 和 e 所标记的范围内所有的元素。返回一个迭代器,它指向被删除元素段后面的元素。如果 e 身就是指向超出 端的下一位置的迭代器,则返回的迭代器也 指向容器的超出 端的下一位置 |
| c.clear():删除容器 c 内的所有元素。返回 void |
| c.pop_back():删除容器 c 的最后一个元素。返回 void。 |
| c.pop_front():删除容器 c 的第一个元素。返回 void。如果 c 为空容器,则该函数只适用于 list 或 deque 容器 |
2.顺序容器的优缺点:
(1)vector:高效的随机访问,插入或删除元素较慢。
(2)list:在任何位置可以高效的插入或删除元素。
(3)queue:高效的随机访问,从两端可以高效的插入和删除元素,在首部或尾部插入元素,不会使任何迭代器失效;而在首部或尾部删除元素,则会使指向被删除元素的迭代器失效。在queue任何其他位置插入或删除元素将使指向该容器所有元素的迭代器都失效。
二、关联容器:map,set
1.map容器的常见用法:
map定义的类型:键值对的形式存储
| map<K,V>::key_type:在 map 容器中,用做索引的键的类型 |
| map<K,V>::mapped_type:在 map 容器中,键所关联的值的类型 |
| map<K,V>::value_type:一个 pair 类型,它的 first 元素具有const map<K, V>::key_type 类型,而 second 元素则为 map<K, V>::mapped_type 类型 |
(1)声明
map<string,string> mp1;
(2)插入元素:
下标法:
mp1["Tom"] = "dsjfkjf";
**注意:使用下标法时,若map中不存在,则直接插入该键,并添加默认类型的值。
insert:mp1.insert(map<string,string>::value_type("Joeey","dsjf"));
(3)访问元素:
下标法:
string value1 = mp1["Tom"];
**注意:使用下标法访问元素时,如果该键不在 map 容器中,那 么下标操作会插入一个具有该键的新元素。
使用count函数:
mp1.count("Tom");返回“Tom”出现的次数
使用find函数:
mp1.find("Tom");如果 map 容器中存在按 "Tom" 索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端迭代器。
(4)迭代遍历元素:
// get iterator positioned on the first element
map<string, int>::const_iterator
map_it = word_count.begin();
// for each element in the map
while (map_it != word_count.end()) {
// print the element key, value pairs
cout << map_it->first << " occurs "
<< map_it->second << " times" << endl;
++map_it; // increment iterator to denote the next element
}
(5)删除元素:
| m.erase(k):删除 m 中键为 k 的元素。返回 size_type 类型的值,表示删除 的元素个数 |
| m.erase(p):从 m 中删除迭代器 p 所指向的元素。p 必须指向 m 中确实存在 的元素,而且不能等于 m.end()。返回 void |
| m.erase(b,e):从 m 中删除一段范围内的元素,该范围由迭代器对 b 和 e 标记。 b 和 e 必须标记 m 中的一段有效范围:即 b 和 e 都必须指向 m 中的元素或最后一个元素的下一个位置。而且,b 和 e 要么相等 (此时删除的范围为空),要么 b 所指向的元素必须出现在 e 所 指向的元素之前。返回 void 类型 |
2.set:只能存储键
set 容器的每个键都只能对应一个元素,不提供下标操作符。
正如不能修改 map 中元素的键部分一样,set 中的键也为 const。
(1)在 set 中添加元素:可使用 insert 操作。
set<string> set1;
set1.insert("the");
(2)从 set 中获取元素:为了通过键从 set 中获取元素,可使用 find 运算。如果只需简单地判断某个元素是否存在,同样可以使用 count 运算,返 回 set 中该键对应的元素个数。当然,对于 set 容器,count 的返回值只能是 1(该元素存在)或 0(该元素不存在)。
C++学习基础四——顺序容器和关联容器的更多相关文章
- 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...
- 【c++ Prime 学习笔记】第11章 关联容器
关联容器的元素按照关键字来保存和访问,而顺序容器的元素是按照在容器中的位置来保存和访问 关联容器支持高效的关键字查找和访问 2种关联容器: map中的元素是关键字-值对(key-value对),关键字 ...
- stl中顺序性容器,关联容器两者粗略解释
什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...
- C++ STL 顺序容器--list + 关联容器
list 双向链表,可以双向遍历,既指向前驱节点,又指向后继但不能随机访问任意元素,可动态增加或者减少元素,内存管理自动完成,增加任何元素都不会使迭代器失效, 删除元素时,除了指向当前被删元素的迭代器 ...
- C++ Primer : 第十一章 : 关联容器之关联容器的迭代器和操作
关联容器的操作 除了和顺序容器定义的类型之外,关联容器还定义了一下几种类型: 关联容器额外的类型别名 key_type 此容器类型的关键字类型 mapped_type 每个关键字关联的类型, ...
- C++之容器(关联容器)
关联容器和顺序容器的本质区别:关联容器是通过键存取和读取元素.顺序容器通过元素在容器中的位置顺序存储和访问元素.因此,关联容器不提供front.push_front.pop_front.back.pu ...
- salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...
- ThinkPHP 学习笔记 ( 四 ) 数据库操作之关联模型 ( RelationMondel ) 和高级模型 ( AdvModel )
一.关联模型 ( RelationMondel ) 1.数据查询 ① HAS_ONE 查询 创建两张数据表评论表和文章表: tpk_comment , tpk_article .评论和文章的对应关系为 ...
- Docker学习笔记四:Docker镜像、容器管理工具shipyard
一.拉取以下几种镜像: docker pull alpineshipyard/shipyarddocker pull swarm docker pull shipyard/shipyarddocker ...
随机推荐
- HDU 4717 The Moving Points (三分法)
题意:给n个点的坐标的移动方向及速度,问在之后的时间的所有点的最大距离的最小值是多少. 思路:三分.两点距离是下凹函数,它们的max也是下凹函数.可以三分. #include<iostream& ...
- 【转】使用Sublime + PlantUML高效地画图
project: blog status: publish target: how-to-use-sublime-and-plant-uml-draw-diagram.md date: 2015-12 ...
- html页面的head标签下
head区是指首页html代码的<head>和</head>之间的内容. 必须加入的标签 1.公司版权注释 <!--- the site is designed b ...
- linux命令:head
1.命令介绍: head用来显示文件的开头的一部分. 2.命令格式: head [选项] 文件 3.命令参数: -q 隐藏文件名 -v 显示文件名 -c<字节> 显示字节数 -n<行 ...
- Modules
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- MxNet下训练alexnet(一)
1.图像经过工具包中的 make_lsit im2rec 转换为可调用各式.rec,.bin都可以 2.然后使用train_imageXXXX进行训练,参数需要对应 3.利用保存的模型进行估计,测试 ...
- Ubuntu安装gfortran
命令行运行 sudo apt-get install gfortran
- SpringMVC 用http请求的Get和Post请求作为路由的方法的重载方式
@Controller @RequestMapping("/messageProcessing") public class WechatPushController { @Aut ...
- /proc/uptime详解
From:http://smilejay.com/2012/05/proc_uptime/ 在Linux中,我们常常会使用到uptime命令去看看系统的运行时间,它与一个文件有关,就是/proc/up ...
- 适配器模式(Adapter Pattern)
将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 模式中的角色 目标接口(Target):客户所期待的接口.目标可以是具体的或 ...