STL的注意事项
template是一个泛化的:
使用template时开始仅仅是声明,具体的例如:k<int> a;叫做实例化
显式实例化:类似k<int>a;明确指出哪种类型;
隐式实例化:类似k<>a;没有说明类型,有编译器自动匹配
特化:(个人认为就是自己制定template 中T的作用)
操作符重载:
复习stl:
vector:
list不适合查找;
顺序容器和关联容器中都有的成员函数:
erase:删除一个或多个元素
clear:删除所有元素
vecter,deque支持随机访问,支持迭代器的<,>,i=i+2的操作;
stack,queue,priority_queue不支持迭代器
list,set,mulset,map,mulmap为双向,不支持随机访问,无<,>,[]等;
list在使用merge合并时,为从小到大排序的合并;
l.splice(l.begin(),ll,ll.begin(), ll.end());
map :
添加元素:m.insert(make_pair(str_copy, str));
m.insert(pair<string ,string>(str_copy, str));
(multimap与map共用;而m[str]=str1只适合map)
可用迭代器遍历: if (m.count(p->first) == 1)
s.push_back(p->second);
(第一个为p->first ,第二个为p->second)
set :
if (S.size() == lens) ans++;else lens = S.size;
可利用重复元素不进入set中,使用容器内个数是否相等来统计重复元素的 个数
if (s.find(x)!=s.end()) 判断元素是否属于集合(因为如果不属于返回值为s.end())
vector :
查找里面的元素个数:m.size();
list :
Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.
string :
str1.replace(pos, 3, s2);//replace 的第一参数为下标,第二为个数,第三个为要替换的东西
pos = str1.find(s1, 0);//第一个参数为找的符合s1的字符串,第二个是str1开始查找的位置
str.substr(begin,len);//返还str开始的下标长len的字符串
str.replace(pos,3,s2)//用s2中的字符替换str[pos]开始后三个字符;
数字转string:
for (int i = 1; i <= n; i++)
str += '0' + i;
dequeue :
q.push()//放在队列后
q.front()//访问第一个
q.pop()//删除第一个
q.back()//访问最后一个
注意:为顺序存储结构:
queue :
只能进行pop头,push 尾
注意:为顺序存储结构:
priority_queue:
默认从大到小(less)注意:set从小到大(greater);
从大到小:priority_queue<T,vector<T>,greater<T>> q;
放入其中时,优先级大的放最上面(可查奶牛问题);
algorithm:
使用copy()之前要确保不溢出,string可以考虑reserve;
next_permutation(全排列):
do{cout << str << endl;} while (next_permutation(str, str + strlen(str), cmp));
(可以想把办法使用字符串剪切操作输出全排列的位数)
s = str.substr(0, m);
cout << s << endl;
while (next_permutation(str.begin(), str.end()))
{
if (s != str.substr(0, m))
{
s = str.substr(0, m);
cout << s << endl;
}
}
max_element(begin,end,mycmp);
bool mycmp(const pair<int, int> p1, const pair<int, int > p2)
{
return p1.second < p2.second;
}
(对于mycmp,,,min_element返回最小值的地址)
count(a, a + 5, 'a')//第一个参数为开始地址,第二个为结束的地址,第三个为要找的值
getline(cin,s2,'j');//第一个为从哪读入,第二个为读给的对象,第三个为到那停止(默认换行停止);
sort(vect.begin(),vect.end(),greater<int> ())//默认从大到小
STL的注意事项的更多相关文章
- 【坑点集合】C++ STL 使用注意事项整理
Intro 简单整理了一些关于 C++ STL 的注意点. 虽然大多数东西可以手写不过某些东西最好少造轮子,善用 STL 可以节约很多考场时间,简化实现. 当然是时空限制和功能足够的前提下. Tips ...
- 关于STL的map的注意事项
关于map是什么,这里就不多叙述了. 直接正题,常用的map插入操作有三种方法:通过pair<key_type,value_type>.通过value_type插入数据.还有一种类似于数组 ...
- STL容器vector应用注意事项
[1]提前分配足够空间以免不必要的重新分配和复制代价 关于vector容器重新分配和复制及析构释放的代价,请参见随笔<STL容器之vector>. 应用示例对比代码如下: #include ...
- STL MAP使用注意事项
Hat’s Words A hat’s word is a word in the dictionary that is the concatenation of exactly two other ...
- C++ STL之迭代器注意事项
1.两个迭代器组成的区间是前闭后开的 2.如果迭代器的有效性,如果迭代器所指向的元素已经被删除,那么迭代器会失效 http://blog.csdn.net/hsujouchen/article/det ...
- c++STL排序算法注意事项
关于算法中的比较函数 #include<iostream> #include<algorithm> using namespace std; int compare(doubl ...
- stl中的for_each() 函数的注意事项
#include<iostream> using namespace std; #include"vector" #include"algorithm&quo ...
- stl里面stack的注意事项
1. pop是不返回元素的.因为不能返回引用,只能返回实例.而这个实例是在函数里面初始化的,所以必须在外面再赋值和初始化.而如果实例复制失败,会产生丢失. 2. 而top是可以返回引用的.实际上,返回 ...
- STL sort的comp函数注意事项
今天写了个题,结果碰巧re了,我眉头一皱发现事情并不简单. 原来我之前的comp写的都是错的. bool cmp(milkman a,milkman b) { return a.price<=b ...
随机推荐
- org.springframework.web.util.NestedServletException : Handler processing failed; nested exception is java.lang.StackOverflowError
1 ,错误原因,循环冗余检查 result.setNearUsers(userList); Page page = new Page(); pag ...
- 【vue】中 $parent 和 $children 的使用方法
<div id="app"> A{{msg}} <my-button :msg="msg"></my-button> < ...
- python学习-Day1-接口测试
学习内容:接口测试 学习方式: 通过工具测试http接口 工具:postman + jmeter 基础知识 一. 接口调用测试:接口请求报文拼接 1. 问号前是url,后面是参数名和参数值,多个参数用 ...
- byte数组和int之间相互转化的方法
Java中byte数组和int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送者接收的数据都是byte数组,但是int类型是4个byte组成的,如何把一个整形in ...
- Oracle 11g R2 for Win10(64位)的安装步骤
下载 官网下载地址: win64_11gR2_database_1of2.zip win64_11gR2_database_2of2.zip 将两个压缩包解压到同一个目录下,即"databa ...
- (6)Java数据结构-- 转:JAVA常用数据结构及原理分析
JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balab ...
- Ajax原生请求和java对象转成json
\黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day23-资料源码\ajax_code\day23_3 本代码中有模 ...
- 在 sql server 中,查询 数据库的大小 和 数据库中各表的大小
其实本来只想找一个方法能查询一下 数据库 的大小,没想到这个方法还能查询数据库中 各个数据表 的大小,嗯,挺好玩的,记录一下. MSDN资料:https://msdn.microsoft.com/zh ...
- win7系统查看硬盘序列号步骤
1.在开始那里输入cmd,打开命令窗口: 2.输入diskpart,按enter键,进入底盘查看选项: 3.输入list disk,按回车键: list disk:查看电脑上有几块硬盘: 输入sele ...
- Linux系统特点
自由软件 真正的多用户.多任务操作系统 极强的平台可伸缩性 强大的管理功能 强大的网络功能