STL的学习日记

STL

  1. vector
  2. set
  3. string
  4. map
  5. queue
  6. priority_queue
  7. stack
  8. pair
  9. algorithm

vector

【一种自动改变数组长度的数组】

*在面对图论时候,vector作为一种特殊的数据结构,可以以邻接表的方式存储图。

1.定义

Vector<类型名> 变量名; 类型名可以是int,char这种常见的,也可以是自己定义的类型 struct

注意,当定义二维vector数组时,可以

@vector<vector<int> > name;

@vector<int> array[SZIE];

这两种方式都能实现二维的vector,但是前者一维二维的长度都是可以动态增加的,而后者只有二维的长度可以增加。

  2.访问方式

@下标访问       ve [ i ]

@用迭代器访问  vector<类型名>::iterator 变量名;

注意,迭代器可以理解为stl类型的指针。正如普通的指针指向不同类型元素时候只需要改变指针的类型,迭代器指向不同stl元素的时候也只需要改变迭代器的类型。

#include <iostream>

#include <vector>

using namespace std;

int main(){

    vector<int> v;

    for (int i = 0; i < 5; i++)

    {

        v.push_back(i);

    }

    //v.begin()返回v的首元素地址

    vector<int>::iterator it=v.begin();

    for (int i = 0; i < v.size(); i++)

    {

       cout<<it[i]<<" ";

    }

    return 0;

}

不过,我们更常见用:

for
(vector<int>::iterator
it=v.begin();
it!=v.end();it++)
{
cout<<*it<<" ";
}

3.vector自带函数

@push_back()   向vector末尾插入

@pop_back()    末尾弹出

@size()          返回vector元素个数,O(1)的时间复杂度

@clear()         清空

@insert()        在指定位置插入,insert(pos,x)

@erase()         删除指定位置或区间的元素,erase(pos)

4.为什么要vector

我们在很多场景会遇到一组不知道长度的数据,在这种情况下,vector可以动态的帮助我们减少空间的占用。

Set

【一个内部自动有序且不含重复元素的容器】

1.定义

set<类型名> 变量名;      和vector定义一样,有多种类型可以自主选择

2.元素访问

不同于vector,set只能用迭代器访问

Set<类型>::iterator it;

用*it 来访问set内的元素。

#include<iostream>
#include<set>
using namespace std;
int main(){
set<int> st;  
st.insert(5);  
st.insert(2);
st.insert(6);
st.insert(2);  
for(set<int>::iteratorit =st.begin(); it != st.end(); it++){    
cout<<*it<< endl;   
}  
return 0;
}

输出:

5

 6

注意,这里的输出是2,5,6的原因是因为set自动帮我们去除了重复元素,并且自动递增排序了。

3.set常用函数

@insert()      插入元素

@find()        find(value),返回该值在容器内的地址

@erase()       删除单个元素或一个区间的所有元素

  注意,我们对set容器进行操作都是按照地址的,所以这里传入的参数也应该是迭代器,st.erase(it),st.erase(it, st.end());

*一个方法可以删除指定value的元素

#st.erase(st.find(value));#

@size() 返回set内元素的个数。

4.为什么要set

当我们有要求对一组数据进行去重并排序时,set是一个非常有用的数据结构。

本文由【C++】标准模板库(STL):超快入门!算法竞赛必看! - 知乎 (zhihu.com)修改而成

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值