您的位置:首页 > 其它

关于STL 的那些事

2016-12-15 23:58 155 查看
今晚参加训练。。。树状数组的练习,傻乎乎的用STL做了一晚,虽然题没做出来,不过对STL的查找有了更深一层的理解。

关于STL。

输入输出

vector push_back pop_back

stack push pop

queue

push pop

头:front() 尾 back()

priority_queue

push pop

头 top 没有尾

List

push_back push_front pop_back pop_front 头:front begin 尾 back end 不过back是最后一个元素的迭代器 而end是最后一个元素的下一个迭代器 L.erase(迭代器) L.reverse() L.sort(cmp) 可自定义cmp,remove(键值),erase(迭代器)。

set 里面元素已经排序而且不接受重复元素

multiset 接受重复元素 insert插入 m.find(值)返回迭代器 remove(值)。

deque 双向队列(一般用deque而不用queue)双向输入 push_back push_front

string 的查找 Str.find(str,index) 返回index开始 第一次出现str的位置

删除排序后的重复字符。str.erase(unique(str.begin(),str.end()),str.end());

关于STL的查找

http://www.cnblogs.com/me115/p/4564709.html

查找有三种,即点线面:

点就是查找目标为单个元素;

线就是查找目标为区间;

面就是查找目标为集合;

查找点 find(迭代器头,迭代器尾,要找的元素)

find包含在 algorithm 的头文件

count(迭代器头,迭代器尾,要找的元素)数数

但是在map里面可以用 mp.count(下标的值)进行数下标。

lower_bound(迭代器头,迭代器尾,要找的元素)

返回第一个不小于给定元素的迭代器。

binary_search() 有序区间的二分查找

返回的是布尔类型

search() 查找子区间首次出现的位置

find()用来查找单个元素,search()则用来查找一个子区间;

示例:从myvector中查找出现子区间[20,30]的位置:

int needle1[] = {20,30};

it = std::search (myvector.begin(), myvector.end(), needle1, needle1+2);

if (it!=myvector.end())

std::cout << “needle1 found at position ” << (it-myvector.begin()) << ‘\n’;

一般容器查找 找不到的话都是最后一个迭代器 即==end(),栈和队列没有end()所以这样找无法确定是否找到了。

string 里面find查找 str.find(字符串) 找不到 返回 string::npos,

数组里面的查找 要得到下标的话请减去首地址 int pos=lower_bound(a,a+n,x)-a; 因为这里lower_bound 返回的是地址

既然是队列,也就只有入队、出队、判空、大小的操作,并不具备查找功能。队列不具备查找功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: