STL
STL学习及源码剖析
倾听雪的声音
这个作者很懒,什么都没留下…
展开
-
auto_ptr与unique_ptr
二者都定义在memory中auto_ptr部分源码template<class _Ty> class auto_ptr { private: _Ty * _Myptr; // the wrapped object pointer public: }原创 2020-09-22 17:15:52 · 130 阅读 · 0 评论 -
std::copy()的一些坑
一、迭代器不安全有这个警告时加上#define _ITERATOR_DEBUG_LEVEL 0二、如果要复制给一个vector,用resize申请空间copy接受三个迭代器,第一个和第二个为要复制的区间[first,last)。第三个迭代器为目标的起始位置,要求目标已有足够的空间。即不能是空的vector(size==0)。使用reserve,vector的capicity增加了,size却还是0,所有不能用来申请空间(可能是这个原因吧)#define _ITERATOR_DEBUG_LEVEL原创 2020-07-20 21:00:06 · 700 阅读 · 0 评论 -
STL heap(堆)
STL中没有提供堆这种容器,但是提供了一组将其它容器重构成具有堆排列顺序的算法。一、make_heap。将一组现有的数据转换成heap结构。示例1:#include<iostream>#include<vector>#include<queue>//#include<xfunctional>//含less与greaterint main(){ std::vector<int> L = {1,23,4,56,78,34,54,27原创 2020-07-19 22:04:15 · 151 阅读 · 0 评论 -
std::priority_queue 用法
可以在优先级队列中自定义数据的优先级, 让优先级高的排在队列前面,优先出队。优先队列具有队列的所有特性,包括队列的基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。top 访问队头元素empty 队列是否为空size 返回队列内元素个数push 插入元素到队尾 (并排序)emplace 原地构造一个元素并插入队列pop 弹出队头元素swap 交换内容用法:priority_queue<Type, Container, Functional>Type为元原创 2020-07-18 00:25:38 · 4030 阅读 · 0 评论 -
std::vector中的insert、emplace、push_back、emplace_back
一、insert有多个重载函数,可完成多种类型的插入1、iterator insert(pos,element)在迭代器pos位置之前,插入元素element。并返回新插入元素位置的迭代器。2、iterator insert(pos,n,element)在迭代器pos之前,插入n个element,并返回第一个新插入元素的迭代器(离pos最远那个)3、iterator insert(pos , other_first , other_last)在迭代器 pos 指定的位置之前,插入其他容原创 2020-07-17 21:45:24 · 2557 阅读 · 0 评论 -
std::map的使用
map是一种字典存储<key,value>,map里存放的必须是pair模板类的对象,因为pair模板中的first就是key,second就是value。pair模板在STL种的定义很复杂,我只了解了如何创建pair对象和提供了哪些接口。1、创建pair对象std::pair<K, V> element;调用默认构造函数创建了pair类对象element,没有赋值。...原创 2020-07-16 21:56:18 · 3184 阅读 · 0 评论 -
vector: erase与insert
erase: vector有两个重载的eraseiterator erase( iterator _Where);iterator erase( iterator _First, iterator _Last);如果是删除指定位置的元素时:返回值是一个迭代器,指向删除元素下一个元素;如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素;insert: vector中有三个重载的insertiterator insert( iterator loc,原创 2020-07-03 11:55:55 · 1627 阅读 · 0 评论 -
vector初始化时的()[ ]区别,指针与迭代器的认识
1vector<int> s;vector<int>* p=&s;s是一个vector型的对象,它不是数组,但它重载了[ ],支持下标运算。p是指向这个对象的指针,p++,p[1]这种屁都不是,因为s就一个,s不是对象数组的名字。这下知道为什么要有迭代器了吧,因为指向s的指针不可以移动,想在s元素上移动就得使用s内部的“指针”。所以封装了迭代器,来在s 上“移动”。(*p)[1];//是正确的,因为*p就是s2vector<int> s(2);//是原创 2020-07-03 11:35:18 · 420 阅读 · 0 评论 -
vector: resize reserve
问题:使用vector时,直接push_back会造成很多复制(push_back时不一定就增加一个位置,要是加多了,后面的push_back倒是不会引起大量复制)#include<vector>#include<iostream>class A{ int a;public: A() { std::cout << "构造函数1"<<std::endl; } A(int a1):a(a1){ std::cout << "构造函数2"原创 2020-07-01 15:09:35 · 149 阅读 · 0 评论 -
algorithm库函数
https://blog.csdn.net/qq_41431457/article/details/88919340原创 2020-06-23 23:39:24 · 153 阅读 · 0 评论 -
C++的标准库,STL及std的区别
STL是标准模板库,是标准库的子集。主要是容器、算法、迭代器。标准库还包括stream,string等,STL大约占了标准库内容得80%std是命名空间的名字,目的是为了避免命名空间污染。模板库(包括stl)的设计者,特意在库文件里面加上了命名空间。这样,我们使用者就可以在定义自己的函数时,定义自己的命名空间。然后在自己定义的命名空间作用域范围内,使用我们自己定义的、但可能和标准库里的函数重名的函数。这样就不会有函数冲突了,使用时注意命名空间的作用域就好了!也就是说,模板库(包括stl,stream,s原创 2020-06-23 14:22:24 · 4977 阅读 · 0 评论