—顺序容器: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++学习基础四——顺序容器和关联容器的更多相关文章

  1. 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解   建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...

  2. 【c++ Prime 学习笔记】第11章 关联容器

    关联容器的元素按照关键字来保存和访问,而顺序容器的元素是按照在容器中的位置来保存和访问 关联容器支持高效的关键字查找和访问 2种关联容器: map中的元素是关键字-值对(key-value对),关键字 ...

  3. stl中顺序性容器,关联容器两者粗略解释

    什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...

  4. C++ STL 顺序容器--list + 关联容器

    list 双向链表,可以双向遍历,既指向前驱节点,又指向后继但不能随机访问任意元素,可动态增加或者减少元素,内存管理自动完成,增加任何元素都不会使迭代器失效, 删除元素时,除了指向当前被删元素的迭代器 ...

  5. C++ Primer : 第十一章 : 关联容器之关联容器的迭代器和操作

    关联容器的操作 除了和顺序容器定义的类型之外,关联容器还定义了一下几种类型: 关联容器额外的类型别名  key_type    此容器类型的关键字类型 mapped_type  每个关键字关联的类型, ...

  6. C++之容器(关联容器)

    关联容器和顺序容器的本质区别:关联容器是通过键存取和读取元素.顺序容器通过元素在容器中的位置顺序存储和访问元素.因此,关联容器不提供front.push_front.pop_front.back.pu ...

  7. salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...

  8. ThinkPHP 学习笔记 ( 四 ) 数据库操作之关联模型 ( RelationMondel ) 和高级模型 ( AdvModel )

    一.关联模型 ( RelationMondel ) 1.数据查询 ① HAS_ONE 查询 创建两张数据表评论表和文章表: tpk_comment , tpk_article .评论和文章的对应关系为 ...

  9. Docker学习笔记四:Docker镜像、容器管理工具shipyard

    一.拉取以下几种镜像: docker pull alpineshipyard/shipyarddocker pull swarm docker pull shipyard/shipyarddocker ...

随机推荐

  1. Win7下通过eclipse远程连接CDH集群来执行相应的程序以及错误说明

    最近尝试这用用eclipse连接CDH的集群,由于之前尝试过很多次都没连上,有一次发现Cloudera Manager是将连接的端口修改了,所以才导致连接不上CDH的集群,之前Apache hadoo ...

  2. Bitcode设置 编译问题

    今天在一个iOS培训网站上看到一篇关于第三方库不包含bitcode就会报错的文章,感觉剖析得很详细,分享出来,希望可以对iOS初入门者有所帮助.下面我们就一起来看看吧. 用Xcode 7 beta 3 ...

  3. [DS Basics] Data structures

    1, LinkedList composed of one and one Node: [data][next]. [head] -> [data][next] -> [data][nex ...

  4. Flask-DebugToolbar

    This extension adds a toolbar overlay to Flask applications containing useful information for debugg ...

  5. 【 D3.js 入门系列 --- 2.1 】 关于如何选择,插入,删除元素

    在D3.js中,选择元素的函数有两个:select 和 selectAll . 先说明一下它们的区别: select 是选择所有指定元素的第一个 selectAll 是选择指定元素的全部(以用于后面同 ...

  6. css中的字体及文本相关属性

    css中的字体及文本相关属性 1.字体相关属性 字体主要可以设置color.font-family.font-size.font-size-adjust.font-stretch.font-style ...

  7. Candy Store

    Candy Store Time Limit: 30000ms, Special Time Limit:75000ms, Memory Limit:65536KB Total submit users ...

  8. hdu 4348 To the moon

    题意:n个数 m次操作 操作分别为 C l r d: 把区间[l, r] 加 d Q l r : 查询区间[l, r]的和 H l r t: 查询时间t的时候[l, r]的和 B t: 回到时间t 思 ...

  9. 论文阅读之:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network

    Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network  2016.10.23 摘要: ...

  10. Extjs各版本的下载链接

    Extjs的版本繁多,本文收集了Extjs各个版本的下载链接,包括官网和非官网的,以及各种汉化版api,欢迎大家下载分享. Extjs最新版下载链接:http://www.sencha.com/pro ...