一、迭代器iterator

迭代器是容器的一种遍历方式,每种容器都定义了自己的迭代器类型

声明一个迭代器:

  容器名称<数据类型>::iterator 迭代器名称

vector<int>::iterator it;

map<int,int>::iterator it;

set<int>::iterator it;

.......

使用:

  for(it=vec.begin();it!=vec.end();it++)

    cout<<*it;

二、vector

1、常用操作

empty():判断向量是否为空,为空返回真,否则为假

begin():返回向量(数组)的首元素地址

end(): 返回向量(数组)的末元素的下一个元素的地址

clear():清空向量

front():返回得到向量的第一个元素的数据

back():返回得到向量的最后一个元素的数据

size():返回得到向量中元素的个数

push_back(数据):将数据插入到向量的尾部

pop_back():删除向量尾部的数据

.....

2、遍历方式

vector向量支持两种方式遍历,因为可以认为vector是一种动态数组,所以可以使用数组下标的方式,也可以使用迭代器

  3、二维动态数组

  4、vector与结构体的使用

  

struct node
{
int id;
int g[];
int rank[];
};
int x;//对第几门学科进行排序
bool cmp(node a,node b)
{
return a.g[x]>b.g[x];
}
vector<node>v(n);//注意是括号,n是容器大小--结构体数组 sort(v.begin(),v.end(),cmp);//按照第x门学科的成绩对每个人排序
#include <iostream>
#include <vector>
#include <list>
#include <map> using namespace std; int main(void)
{
vector<int> vec; vec.push_back();
vec.push_back();
vec.push_back();
vec.push_back();
vec.push_back(); cout << "向量的大小:" << vec.size() << endl; // 数组下标方式遍历vector
for (int i = ; i < vec.size(); i++)
cout << vec[i] << " ";
cout << endl; // 迭代器方式遍历vector
vector<int>::iterator itor = vec.begin();
for (; itor != vec.end(); itor++)
cout << *itor << " ";
cout << endl; return ;
}

三、map

map是STL 的一个关联容器,它提供一对一的数据处理能力(键-值:其中第一个可以称为关键字(first) ,每个关键字只能在map中出现一次,第二个可能称为该关键字的值(second) ),由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。

map会根据键值自动按字典序排序

1、常用操作

    2、遍历方式

    map支持数组下标和迭代器两种遍历方式

    

1、数组
用一个for循环遍历map,遍历的时候要注意键和值的数据类型
2、迭代器
map<int,string>::iterator it;
for(it=m.begin();it!=m.end();it++)
{ //first-键 second-值
cout<<it->first<<‘ ‘<<it->second;

    提示:map映射的建可以是string类型,map<string ,int>m是合法的。eg:string s="ABC", m[s]=1;

    

四、set集合

集合(set)是一个容器,它其中所包含的元素的值是唯一的,会把存入的元素自动排序和去重

头文件 #include<set>

声明一个set集合: set<数据类型>名字   可以开成数组使用

  1、基本操作

  

    注意:这里的p.begin()和p.rbegin()可以直接当指针来用

      

#include<iostream>
#include<set>
using namespace std;
set<int>p;
int main()
{
for(int i=;i<;i++)
p.insert(i);
//输出set的第一个值和最后一个值
cout<<*p.begin()<<endl;
cout<<*p.rbegin()<<endl;
//删除set的第一个值和最后一个值
set<int>::iterator it=p.end();
p.erase(p.begin());
p.erase(--it);
cout<<*p.begin()<<endl;
cout<<*p.rbegin()<<endl;
return ;
}

    2、遍历方式

      set不支持下标操作,只能用迭代器遍历

五、multiset

    操作和set一样,功能上有所不同,multiset会对数据自动排序,但是不会去重

六、pair

pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。区别在pair不会对数据自动排序。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first和 second

头文件:#include<utility>

声明:

  pair<数据类型,数据类型> 名字          可以开成数组

功能:

  pair将一对值(T1和T2)组合成一个值,

这一对值可以具有不同的数据类型(T1和T2),

两个值可以分别用pair的两个公有函数first和second访问。

使用方法和结构体一样,可以直接赋值

pair<int,int>p[];
p[].first=;
p[].second=;
......

  在vector中使用pair

#include<iostream>
#include<vector>
#include<utility>
using namespace std;
vector<pair<int,int>>v;//其实和直接开成数组形式一样 pair<int,int>p[205];
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
v.push_back(make_pair(x,y));
}
vector<pair<int,int>>::iterator it;
for(it=v.begin();it!=v.end();it++)
cout<<it->first<<' '<<it->second<<endl;
return ;
}

容器STL的更多相关文章

  1. c++容器 STL

    2019-01-24 22:30:32 记录学习PAT的一些知识,有待更新 注:本文是对Algorithm 算法笔记 的总结 C++标准库模板(Standard Template Library,ST ...

  2. STL容器与配接器

    STL容器包括顺序容器.关联容器.无序关联容器 STL配接器包括容器配接器.函数配接器 顺序容器: vector                             行为类似于数组,但可以根据要求 ...

  3. STL之顺序容器

    顺序容器: vector:数组 list:链表 deque:双端数组 顺序容器适配器: stack:堆栈 queue:队列 priority_queue:优先级队列 deque是一个动态数组 dequ ...

  4. STL理论基础、容器、迭代器、算法

    一.STL基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段 ...

  5. C++标准模板库STL算法与自适应容器(栈和队列)

    参考<21天学通C++>第23与第24章节,对STL算法与自适应容器进行介绍. 实际上在前面的STL顺序容器.关联容器进行介绍时或多或少引用到了一些STL算法中的模板函数.而自适应容器是在 ...

  6. 详细解说 STL 排序(Sort)

    0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...

  7. STL学习之路

    本文面向的读者:学习过C++程序设计语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者.这实际上是我学习STL的一篇笔记,老鸟就不用看了. 什么是泛型程序设计 我们可以简单 ...

  8. 跟我学STL系列(1)——STL入门介绍

    一.引言 最近这段时间一直都在自学C++,所以这里总结下自己这段时间的学习过程,通过这种方式来巩固自己学到的内容和以备后面复习所用,另外,希望这系列文章可以帮助到其他自学C++的朋友们. 由于本人之前 ...

  9. STL之vetor 排序

    1 STL提供的Sort 算法 C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点.STL 排序算法同样需要保持高效.因此,对于不同的需求,STL提供的不同的函数, ...

随机推荐

  1. RDLC 表达式设置精度

    =IIf(RTrim(Parameters!u_currency.Value)="VND","F0","F2")

  2. vmware fusion nat网络模式设置固定ip

    最近想在本地用虚拟环境搭一个k8s环境,但是发现虚拟机的ip会不定时自动变化,导致mosh客户端连接经常中断.于是就想让虚拟机的ip固定住,不再变动. mac 上的 vmware fusion 设置固 ...

  3. teraterm中状态框statusbox

    ;Author : Bing ;Date : 1/17/2019;Usage: modify log drictory according to actual drictorylogfile=&quo ...

  4. 2 JavaScript输出&字面量&变量&操作符&语句&标识符和关键字&字符集&语句&数据类型与类型转换

    JS输出: JavaScript没有任何打印或者输出的函数,但是可以用不同的方式输出数据 window.alert():弹出警告框 document.write():写入文档 innerHTML:写入 ...

  5. 4 CSS导航栏&下拉菜单&属性选择器&属性和值选择器

    CSS导航栏 熟练使用导航栏,对于任何网站都非常重要 使用CSS你可以转换成好看的导航栏而不是枯燥的HTML菜单 垂直导航栏: <!DOCTYPE html> <html> & ...

  6. SRS——打开 stream caster

    按照默认的配置编译启动后,发现 stream caster 不起作用,启动时报如下警告: [-- ::][][] stream caster: off 原因是编译SRS时没有打开StreamCaste ...

  7. js中for循环(原生js)

    1,普通for循环,经常用的数组遍历 var arr = [1,2,3,4,5]; for ( var i = 0; i <arr.length; i++){ console.log(arr[i ...

  8. FFmpeg调用c语言SDK实现日志的打印

    日志文件的三大步 // 导入头文件 #include <libavutil/log.h> // 设置日志级别 av_log_set_level(AV_LOG_DEBUG); //DEBUG ...

  9. pycharm不能安装第三方库,错误代码Non-zero exit code (1) 的解决办法

    pycharm版本 2019.3 大致意思是安装失败,建议的解决方案:尝试从系统终端运行此命令.确保使用正确的'pip'版本,该版本已为位于'C:\ Users \ G \ Desktoplgianf ...

  10. python用户界面编程和文件转换为exe文件

    python用户界面编程学习代码如下所示: #python用户图形界面编程实现import sys #简单用户图形界面实现from PyQt5.QtWidgets import QApplicatio ...