STL
最后冰吻free
不在沉默中死亡,就在沉默中爆发
展开
-
STL set自定义对象
#include <iostream>#include <set>struct Person{public: Person(int age, std::string name):m_age(age), m_name(name){} int m_age; std::string m_name;};std::ostream& operator<<(std::ostream& cout, Person p原创 2021-10-16 14:37:26 · 194 阅读 · 0 评论 -
STL empty由于size
#include <iostream>#include <vector>void test1(){ /* stl容器中判断是否为空,最好使用empty,而不是size函数 empty函数对所有标准容器都是常数操作时间,而对一些list实现, size是耗费线性时间 */}void test2(){ /* stl区间成员函数优先于与之对应的单元素成员函数 */ std::vecto原创 2021-09-23 23:26:10 · 132 阅读 · 0 评论 -
STL不要将派生类对象拷贝给父类
#include <iostream>#include <vector>#include <memory>class Base{public: Base(int age) { m_age = age; } Base& operator=(const Base &b) { m_age = b.m_age; } int m_age;};class Dervie原创 2021-09-22 23:28:20 · 118 阅读 · 0 评论 -
设计栈并获取最小值
#include <iostream>#include <stack>using namespace std;/*实现一个栈,该栈带有出栈(pop)、入栈(push)、取最小元素 (getMin)3个方法。 要保证这3个方法的时间复杂度都是O(1)。 两个栈对象A和B, A用于存储所有数据,A对象默认第一个元素为最小值,B用于存储A中的最小值 若B中top的值比新待插入元素大,则将新插入元素插入到B中; A执行pop时,先A中top值与B中top值相等,则也删除原创 2021-04-29 17:40:50 · 209 阅读 · 0 评论 -
C++ find和find_if
find_if(iterator beg, iterator end, _Pred);按值查找元素,找到返回指定位置迭代器,找不到则返回结束迭代器位置_Pred:函数或谓词(返回bool类型的仿函数)#include <iostream>#include <string>#include <vector>#include <deque>#include <algorithm>#include <list>#inclu原创 2020-09-09 21:57:45 · 330 阅读 · 0 评论 -
C++ 仿函数函数对象使用
#include <iostream>#include <vector>#include<algorithm>using namespace std;class PrintVector{public: void operator()(int var) { cout<<var<<endl; }};class AddSelfVector{public: void operator()(int& var)原创 2020-09-09 11:12:08 · 163 阅读 · 0 评论 -
C++ 谓词
谓词返回bool类型的仿函数称为谓词若果operator()接受一个参数,叫做一元谓词若果operator()接受的两个参数,叫做二元谓词#include <iostream>#include <string>#include <vector>#include <deque>#include <algorithm>#include <list>#include <set>#include <map原创 2020-09-08 21:35:42 · 887 阅读 · 0 评论 -
C++ STL map
map/multimap容器map中所有的元素都是pair(对组)pair中的第一个元素为key(键),起到索引作用,第二个元素为value(值)所有元素都会根据元素的键值自动排序map/multimap是关联式容器,底层结构用二叉树实现map和multimap区别map不允许容器中有重复的key值元素multimap允许容器中有重复的key值元素函数原型size(); //返回容器中的元素个数empty(); //判断容器是否为空swap(mp); //交换两个容器insert原创 2020-09-07 21:21:57 · 182 阅读 · 0 评论 -
C++ STL set
set/multisetset:所有元素都会在插入时自动被排序;set/multiset属于关联式容器,底层结构是用二叉树实现;set和multiset区别set不允许容器中有重复的元素multiset允许容器中有重复元素原创 2020-09-03 22:46:39 · 144 阅读 · 0 评论 -
C++ STL list
list:将数据进行链式存储list是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表是由节点构成的,节点是有数据域和指针域组成;STL中的链表是一个双向循环链表由于链表的存储并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器list的优点1.采用动态存储分配,不会造成内存浪费和溢出,vector的容量往往比size大很多;2.链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素,vector在插入时会移动原创 2020-08-31 22:50:26 · 249 阅读 · 0 评论 -
C++ STL queue
queue队列:先进先出只能在队尾添加元素,队头删除元素因为只有队尾和队头能被外界所访问,因此队列不允许进行遍历原创 2020-08-27 20:49:13 · 297 阅读 · 0 评论 -
C++ STL stack
stack栈是先进后出的,只能在顶部进行插入和删除不能通过size()来进行遍历,因为从pop顶端元素后,size值发生了变化所以需要empty()、top()和pop()结合达到遍历效果构造函数stack stk; //默认构造函数stack(const stack &stk); //拷贝构造函数赋值操作stack& operator=(const stack &stk); //重载赋值操作符数据存取push(elem);//栈顶添加元素pop..原创 2020-08-26 22:13:28 · 137 阅读 · 0 评论 -
C++ STLdeque基本概念
vector和deque区别:vector对于头部的插入和删除效率低,数据量越大,效率越低deque相对而言对于头部的插入和删除速度比vector快(deque支持头部和尾部的删除和插入操作)vector访问元素的速度会比deque快,这和两者内部实现有关deque内部工作原理:deque内部有个中控器,维护每段缓冲器中的内容,缓冲器存放真实数据中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间对头部数据和尾部数据的插入和删除比较快,但访问元素时,需要找到指针指向.原创 2020-08-25 21:36:05 · 238 阅读 · 0 评论 -
C++ STL reserve函数预留空间
#include <iostream>#include <string>#include <vector>using namespace std;/* reserve(int len)容器预留len个元素长度,预留位置不初始化,元素不可访问*/void test1(){ vector<int> v1; int num = 0; int *p = NULL; for (int i = 0; i<100000; i++) {原创 2020-08-24 22:20:41 · 442 阅读 · 0 评论 -
C++ STL vector中swap来收缩空间
#include <iostream>#include <string>#include <vector>using namespace std;/* 使用swap函数和匿名对象来收缩空间*/void test1(){ vector<int> v1; for (int i = 0; i<10000; i++) { v1.push_back(i); } cout<<"v1的容量大小:"<<v原创 2020-08-24 21:57:44 · 349 阅读 · 0 评论