vector,map和set笔记

来源:互联网 发布:江恩正方软件 编辑:程序博客网 时间:2024/06/07 22:46

vector:

c++新增的动态数组

基本操作

push_back()  在数组的最后添加一个元素

pop_back()    去掉数组的最后一个元素

at()                 得到编号位置的数据

begin()           得到数组头的指针

end()              得到数组尾的指针

front()             得到数组头部元素的引用

back()            得到数组末尾元素的引用

max_size()     得到vector最大可以是多大

capacity()       当前vector分配的大小

size()              当前使用数据的大小

resize()           改变当前使用数据的大小,如果它比当前使用的大,则填充默认值

reserve()        改变当前vector所分配空间的大小

erase()           删除指针指向的数据项

clear()            清空当前的vector

rbegin()          将vector反转后的开始指针返回(原来的end-1)

rend()             将vector反转后的开始指针返回(原来的begin-1)

empty()          判断vector是否为空

swap()           与另一个vector交换

常见操作

对vector从小到大排序:sort(begin(),end());要按从大到小排序需要自定义比较函数


map和set底层都是红黑树

map:

map是关联容器,实现数据的一一映射

可以这样定义一个映射:比如map<string,int>month,然后我们就可以这样来定义或修改一个映射关系m["July"]=7。

内部是一棵红黑树

数据的插入

在构造map容器后我们就可以往里面插入数据了。这里记三种方式。

1.用insert函数插入pair数据:m.insert(pair<string,int>("January",1)); //pair也是模板,将两个数据合并为一个通过first和second访问,还有就是mark_pair操作

2.用insert插入value_type数据:m.insert(map<string,int>::value_type("January",1));

3.用数组方式插入:m["January"]=1;  //就是像数组一样插入,在关键字已经存在的情况下会覆盖原来的值

大小:m.size这样查询

查找:

1.使用count判断关键字是否出现,但无法确定位置。

2.使用find函数,能定位位置和返回位置的一个迭代器,如果查找不到返回的迭代器等于end函数返回的迭代器

3.lower_bound函数返回查找关键字的下届,upper_bound函数返回查找关键字的上届,equal_range返回的是pair,里面两个元素分别是lower_bound和upper_bound返回的迭代器,如果相等,则关键字不存在

   if(map_pair.first==map_pair.second)

      cout<<"Do nor find";

  迭代器类似指针能在不暴露对象内部的情况下遍历元素如for(vector<int>::iterator iter = ivec.begin();1. iter != ivec.end(); ++iter)

清空:clear函数

判定是否为空:emply函数

删除:erase函数

         用关键字删除m.erase(key);

         成片删除如m.erase(m.begin(),m.end()); //删除的是左闭右开的一个区间,end返回的是区间的结束末尾地址而不是最后一个元素的地址,左闭右开。

count(x):返回的map中是否存在x,也就是说返回值只有0和1。map是一种映射的结构,函数的的作用也就是判断定义域中有没有x。

find(x):在map中查找x,查找到就返回相应的地址(迭代器),失败就返回end()。


set:

set是集合,和vector不同的是set中元素不能重复,这时一个有序的容器,里面的元素都是排好序的,和multiset不同的是set中元素不能重复

set中元素的插入查询删除等都是在logn时间内完成的

基本操作:

begin()               返回指向第一个元素的迭代器

chear()               清空操作

count()               返回某个值的个数

empty()              判断是否为空

end()                  返回指向最后一个元素的迭代器

equal_range()      返回集合中与给定值相等的上下限的两个迭代器

erase()                删除集合中的元素

find()                  返回一个指向被查到元素的迭代器

get_allocator()    返回集合的分配器

insert()               在集合中插入元素

lower_bound()    返回指向大于或等于某值的第一个元素的迭代器

key_comp()        返回集合能容纳的元素的最大限值

rbegin()             返回指向集合最后一个元素的反向迭代器

rend()                返回指向集合第一个元素的反向迭代器

size()                 集合中元素的数目

swap()               交换两个集合的变量

upper_bound()   返回大于某个值元素的迭代器

value_comp()     返回一个用于比较元素间的值的函数





原创粉丝点击