一、迭代器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 ;
}

最新文章

  1. 登录FTP,下载并读取文件内容
  2. Debian7编译VIM7.4
  3. MYSQL数据库的常用数据类型
  4. ASP.NET 5探险(1):Azure中配置连接字符串、独立项目执行EF7数据迁移
  5. iOS 自定义进度条
  6. 如何计算oracle数据库内存
  7. Cracking the Code Interview 4.3 Array to Binary Tree
  8. PHP header 的几种用法
  9. NodeJS和C++的性能比较(转)
  10. 偷懒的inline-block解决方法
  11. Latin1的所有字符编码
  12. 每周.NET前沿技术文章摘要(2017-06-21)
  13. SaltStack配置管理和YAML
  14. HBuilder git合作-上传项目到Git Hub
  15. HDU4035 Maze 【树形DP】【期望DP】
  16. default activity not found的问题
  17. VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别
  18. dblink(转)
  19. Ubuntu去掉命令行前用户名和主机名方法
  20. 面向对象设计模式纵横谈:Factory Method 工厂方法模式(笔记记录)

热门文章

  1. Mac 系统上有趣的插件
  2. 浅谈SPFA——洛谷P1576 最小花费 题解
  3. Nginx 七层反向代理
  4. Centos10卸载nginx
  5. 2.1.1Remove Duplicates from Sorted Arr
  6. 一个linuxk开发板的开发笔记
  7. PAT T1004 To Buy or Not to Buy - Hard Version
  8. redis 之redis发布订阅
  9. MyBatis6——一级缓存、二级缓存、逆向工程
  10. isEqual判断相等性