algorithm

*1.sort()

用法:sort(数组名,名+长度(,cmp));

int cmp(T a,T b)//T是要排序的a,b的类型,也可以是结构体中任意成员变量

{

return a>b;

}

*2 lower_bound(数组名,名+长度,查询数字)

  int p=lower_bound(a,a+n,x)-a
//(返回数组a中第一个小于等于x元素的下标),配合upper_bound,给排好序的数组使用,可以查询出数组中某元素的个数

vector

    .size() //取读大小
.resize()//改变大小,目前没用过
.push_back()//向尾部添加元素
.pop_back()//删除尾部元素
.insert(,)///如.insert(V.end(),插入元素)

sort()之vector

vector中元素是基本类型
vector<int> vi;
int cmp(int a,int b)
{
return a < b;
} sort(vi.begin(),vi.end(),cmp);
//***方法1**//
vector<int> :: iterator it;
for (it = Vi.begin(); it != Vi.end(); it++)
{
printf("%d\n",*it);
}
//**方法2*///
for (int i = 0; i < Vi.size();i++)
{
printf("%d\n",Vi[i]);
}
 vector中元素是结构体
struct Student
{
int num;
char name[10];
int score;
bool operator < (const Student &s) const
{
return (score < s.score )||(score == s.score && num < s.num);
}
}; vector<Student> V;
sort(V.begin(),V.end());//结构体使用重载运算符
vector<Student> :: iterator it;
//遍历
//***方法1***/
for (it = V.begin(); it!=V2.end(); it++)
{
printf("%d %d\n",it->num,it->score);
}
//****方法2***/
for (int i = 0; i < V.size(); i++)
{
printf("%d %d",v[i].num,v[i].score);
} /**insert 与 eraser*/
//insert 与 araser 是针对地址进行的操作,可以用迭代器找到这个元素,然后对地址访问
vector<int>arr;
vector<int>::iterator it;
for(int it = arr.begin();it!=arr.end();it++)
{
if(*it == number) arr.erase(it);
}
sort(arr.begin(),arr.end());
arr.insert(lower_bound(arr.begin(),arr.end(),number),number);
/*eraser删除之后,其他元素会前移,这个指针变成野指针,不能用了。。*/
arr.eraser(lower_bound(arr.begin(),arr.end(),number));

1.关于 .begin()与.end()与迭代器:

。begin是容器第一个地址,.end()是容器最最后一个元素的下一个地址,因为容器中地址是不连续的,所以不能用it = it + 1;的形式,而为什么it++可以呢?因为自增运算符进行了重载,懂了吧

2.关于vector可以用下表遍历

vector又被称为是动态数组,因为其中的元素存储空间是连续的,但是,神奇的是,他的存储空间会随着插入元素的增多而增长,什么意思呢,就是说,一开始会给你一个默认大小的空间,一但你爆表,他就会将vector的大小变为2倍,其中的元素进行位置移动,比如一开始是16,如果输入第17个数字,内存变成32,.。。。64...以此类推...



map

用法 key -> value 的形式

      定义方法 : map <类型1,类型2> 变量名
本人使用的是 map <string,int> ex
ex[key(string)]=value(int); map<string,int >::iterator iter; //查找是否存在key
iter = ex.find(s2)); //s2为另外一个string,查找是不是存在这个key
if (iter != ex.end()) cout<<"存在\n";

注意 map 不能用sort排序

而且迭代器使用不一样的地方

	//省略遍历过程,iter 的用法是:
iter->first ----> key;
iter->second ---->value

例题:Fzu1008

代码传送门:[点我](git push -u origin master)

set

set容器是用树的形式存在的,它用数学意义表示,可以说是一个集合,而且是自动排序的集合,就是说,set不需要调用sort就住插入的时候就直接排序了的,而且是集合,满足元素互异性,可以重载运算符来反排序

    .size() //取读大小
.insert()//插入元素
set<int>::iterator it;
for (it = Set.begin(); it != Set.end(); it++)
{
printf(" %d",*it);
}

例题:Fzu1664

关于STL:

不得不提及的几点东西,STL里面的东西是哪来的,为什么是那样的,初步接触的时候,我也是一头雾水,只能靠死记,完全不知道里面的这些容器,到底是什么,直到,最近(16.2.26,为了应付传说中的开学考,不得不一次性看一遍类)看到了模版类,豁然开朗

template <class T>
//定义模板函数的时候,也有用template <typename T>
class Compare//定义模板函数
{
public:
Compare(T x, T y):a(x),b(y){}
T max(T a,T b) {return a>b?a:b}
T min(T a,T b) {return a>b?b:a}
pravite:
T a,b;
} //使用该类
Compare<int> a(1,2);//关键,看这里
int main(){
cout<<a.max()<<endl;
cout<<a.min()<<endl; }

看到这里,我突然可以理解,为什么说STL里面都是使用模板.定义变量的时候要写类型在<>里面了

原来,使用规则是:

模板名<实际类型名>对象名;

或者模板名<实际类型名>对象名(参数列表);

假如有多个类型,则:

模板名<实际类型名1,实际类型名2>对象名;

这样我就可以理解为什么pair定义变量(现在知道后称为对象比较合适)要2个类型了,知道这个后,我可以理解上面的那些用法是什么回事了,

其实那些size(),pop()只是对象的成员函数而已,学习stl,其中很大部分是在学习那些不同模板却定义相同名称相同效果的函数而已,然后再结合不同模板不同特殊的功能,来使用,所以,造轮子的意思就是自己写模板?,目前关于STL我只了解到模板,不过好像这只是其中一部分而已,剩下的,以及模板的学习,下学期应该可以探讨完成(16.2.26)


更新日志

|时间 | 更新模块 |

|---------------- | ----------- --- |

|16.3.31 | 添加map以及第一道其例题 |

|16.5.19 |添加vector的sort用法以及添加set,添加各种stl遍历方法|

|16.5.21 |添加vector中用下标遍历方法以及其原理|

|16.7.21 |添加vector中insert与eraser|

STL学习笔记(不定期更新)的更多相关文章

  1. 小程序和PHP学习笔记 ----- 不定期更新。

    学习tp5和小程序过程需要记住的重点记录 1,box-sizing: border-box; 规定两个并排的带边框的框 border-box 为元素设定的宽度和高度决定了元素的边框盒. 就是说,为元素 ...

  2. Effective STL 学习笔记: Item 22 ~ 24

    Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...

  3. Effective STL 学习笔记 39 ~ 41

    Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  4. Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value

    Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...

  5. Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据

    Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...

  6. Effective STL 学习笔记 32 ~ 33

    Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  7. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  8. Effective STL 学习笔记 Item 30: 保证目标区间足够大

    Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...

  9. Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor

    Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...

随机推荐

  1. 160310、oracle数据库的读写分离

    PS:使用AbstractRoutingDataSource路由数据源实现动态数据库的调用   1. 连接哪个数据源的环境变量 package com.hysoft.common;   public  ...

  2. java nio探险

    区别于io: nio是基于通道和缓冲区的,io是基于字节流和字符流的,(千万别被这些破名词唬住).以读取文件为例,文件就是自来水厂,通道就是自来水管道,缓冲区就是你家的缸(或者盛水的xx容器,例如你的 ...

  3. Spoken English Practice(I really hate to give her up, oh ,I know, you should take her.)

    色:连读:                  红色:略读:               蓝色:浊化:               橙色:弱读     下划线_为浊化 口语蜕变(2017/7/10) 英 ...

  4. HDU3535——AreYouBusy

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535 题目意思:给出两个数n,T,分别表示有n个任务集合,T的总时间,对于每个任务集合有两个属性m和t ...

  5. 即使关闭了nagle算法,粘包依旧存在

    JAVA高级架构 https://mp.weixin.qq.com/s?src=11&timestamp=1542107581&ver=1242&signature=OoktA ...

  6. Fat URLs Client Identification

    w在每个URL后面都附加一个用户特有的标识码. HTTP The Definitive Guide Some web sites keep track of user identity by gene ...

  7. SaaS成熟度模型分级:

    SaaS成熟度模型分级: 根据SaaS应用是否具有可配置性,高性能,可伸缩性的特性,SaaS成熟度模型被分成四级.每一级都比前一级增加三中特性中的一种.   可配置 高性能 可伸缩 Level1 N ...

  8. wordcount(C语言)

    写在前面 上传的作业代码与测试代码放在GitHub上了 https://github.com/IHHHH/gitforwork 本次作业用的是C语言来完成,因为个人能力与时间关系,只完成了基本功能,扩 ...

  9. 不得不知的Excel技巧

    1.超链接 选中一个格右击选择超链接. 2.求和 选择一个格点击开始中的求和按钮并拖动求和区域. 3.冻结 冻结一行,选择一行区域,选择开始菜单中的冻结窗格. 冻结上面的行和左边的行,选择夹角的格并点 ...

  10. 吉哥系列故事——完美队形II---hdu4513(最长回文子串manacher)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4513 题意比最长回文串就多了一个前面的人要比后面的人低这个条件,所以在p[i]++的时候判断一下s[i ...