当前位置: 首页 > news >正文

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> ())//默认从大到小

转载于:https://www.cnblogs.com/kangdong/p/8452948.html

相关文章:

  • hdu 4857 Little Devil I
  • Spring Boot实践--项目打包、启动、关闭的方法
  • centos7 安装 gitolite (git服务器)
  • 项目去掉svn管理标志
  • SSM-MyBatis-09:Mybatis中SqlSession的close为什么能造成事务的回滚
  • Javascript理解this对象
  • GNUPG
  • 零基础Python爬虫实现(百度贴吧)
  • 我对CopyOnWrite的思考
  • RabbitMQ入门-路由-有选择的接受消息
  • 报告称国产智能手机全球市场份额33.1% 超过韩国
  • iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge
  • 深入理解java虚拟机 精华总结(面试)
  • Spring框架
  • DTS-071007 表结构在源库和目标库中不一致
  • [nginx文档翻译系列] 控制nginx
  • 2017前端实习生面试总结
  • Angular数据绑定机制
  • Consul Config 使用Git做版本控制的实现
  • es6
  • Flannel解读
  • GitUp, 你不可错过的秀外慧中的git工具
  • input的行数自动增减
  • Linux Process Manage
  • Node项目之评分系统(二)- 数据库设计
  • QQ浏览器x5内核的兼容性问题
  • SAP云平台里Global Account和Sub Account的关系
  • Spring声明式事务管理之一:五大属性分析
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • use Google search engine
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 分类模型——Logistics Regression
  • 聚类分析——Kmeans
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 选择阿里云数据库HBase版十大理由
  • #etcd#安装时出错
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (六)c52学习之旅-独立按键
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET CF命令行调试器MDbg入门(一)
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .Net多线程总结
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .skip() 和 .only() 的使用
  • [ 转载 ] SharePoint 资料
  • [APIO2015]巴厘岛的雕塑