
C++
Hugo5332
天地转,光阴迫
展开
-
STL复习笔记(5)——优先队列(+dijkstra优化)
头文件#include<queue>声明:priority_queue<T> pq;priority_queue<T, vector<T>, cmp> pq;第一种是默认的,第二种则自己定义,第一个参数是数据类型,第二个参数是储存结构,第三则是优先顺序,默认是less我们可以改为greater<T>priority_queue<T,...原创 2018-02-27 00:57:49 · 264 阅读 · 0 评论 -
构造函数不能声明为虚函数,析构函数可以
构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时是必须声明为虚函数。不建议在构造函数和析构函数里面调用虚函数。构造函数不能声明为虚函数的原因是:1 构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功。编译器无法知道对象 的实际类型,是该类本身,还是该类的一个派生类,或是更深层次的派生类。无法确定。。。2 ...原创 2018-09-21 02:18:09 · 310 阅读 · 0 评论 -
进程内存分布(C++)
内存分布只要分为五部分:text(文本段),initialize data(数据段),uninitialized data(为初始化数据段),heap(堆),stack(栈),如下图: 1.文本段也叫代码段,是对象文件或内存中程序的一部分,其中包含可执行指令。文本段在堆栈的下面,是防止堆栈溢出覆盖它。,通常代码段是共享的,对于经常执行的程序,只有一个副本需要存储在内存中,...转载 2018-09-08 09:32:19 · 221 阅读 · 0 评论 -
关于STL中make_heap()用法
对make_heap(), pop_heap(), push_heap()的用法做个总结: make_heap()生成堆,他有两个参数,也可以有三个参数,前两个参数是指向开始元素的迭代器和指向结束元素的下一个元素的迭代器。第三个参数是可选的,可以用伪函数less()和greater()来生成大顶堆和小顶堆,其中type为元素类型。如果只传入前两个参数,默认是生成大顶堆。 push_heap()...转载 2017-03-19 19:31:23 · 3002 阅读 · 0 评论 -
二分法中为啥常用mid=beg+(end-beg)/2 而非mid=(beg+end)/2 ?
理由大概有两个第一 前者不会产生溢出,而后者可能会。第二 前者适用于对迭代器的操作,而后者不行。原创 2018-08-27 11:02:14 · 2077 阅读 · 0 评论 -
STL复习笔记(4)——string
1.头文件: #include<cstring>2.读入方式分两种主要的吧 遇到空格结束则直接用cin>>s;如果要读入空格就用getline(cin,s); 遇到回车结束3.基本函数s.empty() 判断是否为空s.size() 或 s.length() 返回字符的个数s[n] 返回位置为n的字符,从0开始计数s1+s2 连接两个字符串拓展: isalnum(c)...原创 2018-02-25 21:06:44 · 188 阅读 · 0 评论 -
STL复习笔记(3)——queue
头文件#include<queue>声明[cpp] view plain copyqueue<int> q 函数1.push() 入队[cpp] view plain copyq.push(x) 2.pop()[cpp] view plain copyq.pop() 3.front() 访问首元素[cpp] view plain copyq.front() 4.访问...原创 2018-02-25 20:35:31 · 186 阅读 · 0 评论 -
STL复习笔记(2)——stack
头文件 : # include<stack>声明 :stack<int> s;函数:1.push(val) 往栈顶加入一个元素2.pop() 栈顶元素出栈请空栈:while(!s.empty()) { s.pop(); } 3.size() 返回栈中元素4.empty() 判断栈是否为空5.top() 返回栈顶元素栈的操作比较简单 就这些掌握了就行。...原创 2018-02-25 19:34:36 · 172 阅读 · 0 评论 -
STL复习笔记(1)——list
头文件 #include<list>声明方法:list<int> a{1,2,3} list<int> a(n) //声明一个n个元素的列表,每个元素都是0 list<int> a(n, m) //声明一个n个元素的列表,每个元素都是m 基本操作:1.push_back()和push_front() 前者是往后加入元素 后者是往前加入新...原创 2018-02-25 19:25:10 · 180 阅读 · 0 评论 -
vector 扩容为什么要以1.5倍或者2倍扩容
我们知道,vector 在需要的时候会扩容,在 VS 下是 1.5倍,在 GCC 下是 2 倍。那么会产生两个问题:(1)为什么是成倍增长,而不是每次增长一个固定大小的容量呢?(2)为什么是以 2 倍或者 1.5 倍增长,而不是以 3 倍或者 4 倍等增长呢?1、第一个问题 : 如果已成倍方式增长。假定有 n 个元素,倍增因子为 m; 完成这 n 个元素往一...转载 2018-12-17 01:25:25 · 4227 阅读 · 0 评论