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(该元素不存在)。

时间: 2024-10-12 13:08:11

C++学习基础四——顺序容器和关联容器的相关文章

顺序容器和关联容器的特点&amp;STL各容器粗略对比

顺序容器和关联容器的特点1.所有的关联容器都会自动排序,但map和set不允许重复元素,而multimap和multiset允许重复元素 2.关联容器中,map和multimap的key和val是分开的,而set和multiset的key和val是相同的 3.除了vector和deque的迭代器为随机迭代器之外,其余容器的迭代器都是双向迭代器,不能进行++操作 4.顺序容器的insert函数的三种形式为: iterator insert(iterator position, value_type

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

C++之容器(关联容器) 关联容器和顺序容器的本质区别:关联容器是通过键存取和读取元素.顺序容器通过元素在容器中的位置顺序存储和访问元素.因此,关联容器不提供front.push_front.pop_front.back.push_back以及pop_back,此外对于关联容器不能通过容器大小来定义,因为这样的话将无法知道键所对应的值什么. 两个基本的关联容器类型是map和set.map的元素以键-值对的形式组织:键用作元素在map的索引,而值则表示所存储和读取的数据.set仅包含一个键,并有效

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

什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种"对象"还包含了一系列处理"其它对象"的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是"容器类是一种对特定代码重用问题的良好的解决方案". 容器还有另一个特点是容器可以自行扩展.在解决问题时

C++primer笔记:IO库、顺序容器、关联容器、面向对象、泛型算法、模板和泛型编程

第八章:IO库不直接来处理输入输出,而是通过在标准库中的一些类型来处理io istream ostream cin cout cerr getline函数 iostream:定义了用于基本读写流的基本类型 fstream: 定义了基本的读写命名文件的类型 sstream:定义了读写内存的string对象的类型 IO对象无拷贝或者赋值 条件状态:IO定义了一些函数和标志,可以帮助我们访问和操作流得条件状态 strm::iostate 条件状态的完整功能 strm::badbit 流已崩溃 strm

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

建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema Builder 或者build-->schema Builder进入: 2.采用force.com Explorer通过自己写查询语句来查询数据. 此链接为force.com Explorer的下载链接:  http://force-com-explorer-beta.software.infor

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

一.关联模型 ( RelationMondel ) 1.数据查询 ① HAS_ONE 查询 创建两张数据表评论表和文章表: tpk_comment , tpk_article .评论和文章的对应关系为,一条评论 id 对应一篇文章,为 ONE_TO_ONE 关系 ( 一对一 ).评论表的结构为: 其中 aid 字段与文章表的 id 字段对应.打开自定义模型 ArticleModel,让模型继承于 RelationModel,然后定义成员属性 $_link,代码: ArticleModel.cla

《C++primer(第五版)》学习之路-第十一章:关联容器

[ 声明:版权所有,转载请标明出处,请勿用于商业用途.  联系信箱:[email protected]] 11.1 使用关联容器 1. 关联容器类型 按关键字有序保存元素 map                    关联数组,保存关键字-值对 set                      关键字即值,即只保存关键字的容器 multimap            关键字可重复出现的map multiset              关键字可重复出现的set 无序集合 unordered_ma

C++ Primer 学习笔记_34_STL实践与分析(8) --引言、pair类型、关联容器

STL实践与分析 --引言.pair类型.关联容器 引言: 关联容器与顺序容器的本质差别在于:关联容器通过键[key]来存储和读取元素,而顺序容器则通过元素在容器中的位置顺序的存取元素. map的元素以键-值[key-value]对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据. set仅包括一个键,并有效的支持关于某个键是否存在的查询. 关联容器类型 map 关联数组:元素通过键来存取 Set 大小可变的集合,支持通过键来实现的高速读取 multimap 支持同一个键多次

C++primer第十章 关联容器

关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素. 一般来说,如果希望有效地存储不同值的集合,那么使用 set 容器比较合适,而 map 容器则更适用于需要存储(乃至修改)每个键所关联的值的情况.在做某种文本处理时,可使用 set 保存要忽略的单词.而字典则是 map 的一种很好的应用:单词本身是键,而它的解释说明则是值. set 和 map 类型的对象所包含的元素都具有不同的键,不允许为同一个键添加第二个元素.如果一