C++标准模板库介绍

Vector

vector的定义:

vector vi[100]
vector<vector >vi;
区别可以理解成一个是一个一维长度已经固定,一个是可变的

vector内元素的访问:

(1)通过下边
(2)通过迭代器
vector::iterator it=vi.begin()
v[i]和*(v.begin()+i)等价

vector常用函数:

(1)push_back()在容器尾部添加元素
(2)pop_back()删除尾元素
(3)size()
(4)clear() 时间复杂度 O(N)
(5)insert()用来响vector的任意迭代器it处插入一个元素x,时间复杂度O(N)
(6)erase()
删除单个元素erase(it)
删除一个区间内所有元素erase[first,last) 两个时间复杂度都为O(N)
(7)v.end()容器尾元素地址的下一个地址

Set

集合:内部自动有序且不含重复元素的容器(自动按递增排序)

set的定义

set< typename> name
总的来说和vector类似

set容器内元素的访问

只能通过迭代器访问(iterator)
set< typename>::iterator it;
for(it=name.begin();it!=name.end();it++);

set常用函数示例解析

(1)insert();
(2)find(value)返回set中对应值为value的迭代器,时间复杂度为O(logN),N为set内元素个数
(3)erase(),可以结合set一起用
erase(it);
erase(s.begin(),s.end());
(4)size();
(5)clear()
如果不需要排序可以使用unordered_set速度比set快得多

string

string的定义

string str;
string str=“abcd”;

string中内容的访问

(1)通过下标访问
(2)通过迭代器访问

string常用函数

(1)operator +=
(2)compare operator
(3)size()
(4)insert

  • insert(pos,string),在pos号位置插入字符串string
    string str=“abcxyz”,str2=“opq”;
    str.insert(3,str2);
    cout<<str;
    //str=“abcopqxyz”
  • insert(it,it2,it3)用来表示串[it2,it3)将被插在it的位置上

(5)erase();

  • erase(it)
  • erase(first,end) 删除[first,end)位置上的的元素

(6)clear()
(7)substr(pos,len)返回pos号位开始,长度为len的子串
(8)

  • find(str2)当str2是str的子串是,返回其在str 中第一次出现的位置;如果不是str的子串则返回string::npos
  • find(str2,pos)从pos位开始匹配str2返回值和上面相同

(9)replace(pos,len,str2)把str从pos处开始的长度为len的子串替换为str2
replace(it1,it2,str2)

map

map的定义

map<string,int>mp;
map<set,string >mpl

map容器内元素的访问

(1)通过下标访问
(2)通过迭代器访问
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){
printf("%c %d\n",it->first,it->second);
}

map常用函数解析

(1)find(key)返回key的映射的迭代器
(2)erase()
删除单个元素

  • erase(it),it为需要删除的元素迭代器
  • erase(first,last) 删除范围[first,last)

(3)size()
(4)clear()

map常见用途

  • 需要建立字符(字符串)与整数之间的映射的题目
  • 判断大整数或者其他类型数据是否存在的题目,可以把map当bool数组
  • 字符串和字符串的映射

unorder_map用来处理只映射不排序的需求,速度比map要快的多。

queue

  • front()首元素,back()尾元素
  • push(),back()
  • empty()
  • size()

queue常见用途

当需要实现广度优先搜索时,可以不用自己手动实现一个队列,而是用queue作为替代

priority_queue

  • push(),pop()
  • top()队首元素
  • empty()
  • size()

prioirty_queue 内元素优先级的设定

  • priority_queueq;
    priority_queue<int,vector,less >q;
    上面两者等价 表示数字大的优先级高
    greater表示数字小的优先级高

  • 结构体优先级设置
    struct fruit{
    string name;
    int price;
    friend bool operator < (fruit a,fruit b){
    return a.price<b.price;

      }
    

    }
    priority_queuek;

优先队列中的这个函数和sort中的cmp函数的效果刚刚好是相反的
struct cmp{
bool operator<(fruit a,fruit b){
a,price>b.price;
}
}
priority_queue<fruit,vector,cmp>k;
效果和上面用友元函数重载一模一样

set也可以通过第一种友元函数对运算符的重载方法来定义优先级

priority_queue常见的用途

priority_queue可以用来解决一些贪心问题,也可以对Dijkstra算法进行优化

stack

stack常见用途

stack用来模拟一些递归算法

Pair

Pair常见用途

  • 用来替代二元结构体及其构造函数,可以节省编码时间
  • 作为map的键值用来插入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值