容器STL

一、迭代器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、二维动态数组

#include <iostream>
#include <vector>
#include <list>
#include <map>

using namespace std;

int main(void)
{
    vector<int> vec;

    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(4);
    vec.push_back(5);

    cout << "向量的大小:" << vec.size() << endl;

    // 数组下标方式遍历vector
    for (int i = 0; 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 0;
}
View Code

三、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;

    

四、set集合

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

头文件 #include<set>

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

   1、基本操作

  

    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[200005];
p[0].first=1;
p[0].second=2;
......

  在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=0;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 0;
}

猜你喜欢

转载自www.cnblogs.com/-citywall123/p/11336037.html