《STL详解》读书笔记
v.insert(v.begin(), num);//增加
v.erase(v.begin(), v.end()); //擦除
v.erase(v.begin());
reverse(v.begin(), v.end()); //反向排序(从大到小)
sort(v.begin(), v.end(), comp);
-----------------------------------------------------------
string
string::iterator it = s.begin();
s.insert(it, c);
s.replace(pos, pos, c);
s.find(c);
reverse(s.begin(), s.end());
sscanf("bad", "%s", str);
-----------------------------------------------------------
set 集合容器
红黑树:左根右(不允许重复的键值)
set<int> s;
s.insert(num);
set<int>::iterator it;
中序遍历
for(it = s.begin();it != s.end();++it)
cout << *it << " ";
反向遍历
set<int>::reverse_iterator rit;
for(rit = s.rbegin();rit != s.rend();++rit)
cout << *rit << " ";
找到就返回该键值的迭代器位置,否则返回end()
it = s.find(num);
自定义比较函数,要求按键值由大到小的顺序
1、元素不是结构体
struct myComp
{
bool operator()(const int &a, const int &b)
{
return a > b;
}
};
set<int, myComp>::iterator it;
for(it = s.begin();it != s.end();++it)
cout << *it << " ";
2、元素是结构体,把比较函数写在结构体内
struct Info
{
string name;
float score;
//重载' < '操作符,自定义排序规则
bool operator < (const Info &a) const
{
return a.score < score;
}
};
set<Info>::iterator it;
for(it = s.begin();it != s.end();++it)
cout << (*it).name << ":" << (*it).score << endl;
---------------------------------------------------------------
multiset 多重集合容器
删除值为c的所有重复元素,返回删除元素总数
ms.erase(c);
返回第一个元素重复元素的迭代器位置,没有就返回end()迭代器位置
ms.find(c);
---------------------------------------------------------------
map 映照容器
红黑树,键值不重复,比较函数只比较键值
键值重复输入会被覆盖
使用与set集合容器类似
map<int, char>::iterator it;
map<int, char> m;
cout << m.first << m.second << endl;
{
bool operator ()(const int &a, const int &b)
{
if(a != b)
return a > b;
else
return a > b;
}
};
map<int, char, myComp> m;
m[1] = 'a';
{
string name;
float score;
bool operator < (const Info & a) const
{
return a.score < score;
}
};
map<Info, int>::iterator it;
应用:
用 map 实现数字分离
for(int j = 0;j < 10;++j)
m['0' + j] = j;
数字映照字符
for(int j = 0;j < 10;++j)
m[j] = '0' + j;
--------------------------------------------------------------
multimap 多重映照容器
插入元素需要使用 insert()
pair()将两个数据组合成一个数据, map 中将 key 和 value 放在一起来保存
m.insert(pair<string, double>("Jack", 306));
删除键值为 "Jack" 的元素
m.erase("Jack");
查找元素
m.find("Jack");
------------------------------------------------------------------
deque 双端队列容器
deque 采用分块的线性存储结构存储数据,所有 deque 块用一个 map 块进行管理
以数组方式输出元素
d.pop_front();
d.pop_back();
------------------------------------------------------------------
list 双向链表容器
迭代器只能用“++”或“--”的操作移动
插入新元素时,链表自动扩张
l.push_back();
l.push_front();
删除所有等于 1 的元素
l.remove(1);
l.pop_front();
l.pop_back();
l.erase();
l.find(l.begin(), l.end(), 5);
排序
l.sort();
剔除连续重复元素
l.unique();
-----------------------------------------------------------------
bitset 位集合容器
bitset 对象的大小一旦定义,就不能修改了
bitset<10> b;
将所有元素设为1
b.set();
b.set(pos, 1);
将 pos 位设置为 0
b.reset(pos);
直接向输出流输出所有元素
-----------------------------------------------------------------
stack 堆栈容器
s.push();
s.top();
s.pop();
s.size();
s.empty();
-----------------------------------------------------------------
queue 队列容器
queue<int> q;
q.push();
q.size();
q.front();
q.back();
q.empty();
q.front();//队首
q.back();//队尾
-----------------------------------------------------------------
priority_queue 优先队列容器
队列中最大元素总是位于队首
可以重载 "<" 操作符重新定义比较规则
priority_queue<int> pq;
pq.push(1);
pq.size();
pq.empty();
pq.top();
pq.pop();
struct Info
{
string name;
float score;
bool operator < (const Info &a) const
{
return a.score < score;
}
};
struct myComp
{
bool operator ()(const int &a, const int &b)
{
return a > b;
}
};
priority_queue<int, vector<int>, myComp> pq;
《STL详解》读书笔记的更多相关文章
- csapp读书笔记-并发编程
这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...
- CSAPP 读书笔记 - 2.31练习题
根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1) 属于第一种情况 sum = x ...
- CSAPP读书笔记--第八章 异常控制流
第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...
- CSAPP 并发编程读书笔记
CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- laravel实现多对多的分析
在实际开发中多对多的开发还是比较常见的 1.1首先由migrate来创建表(文章表) 1.2同理创建标签表 1.3这是 我会的到如下结果: 2.1在数据迁移表contents中添加几个字段 publi ...
- C# 世界坐标 页面坐标 PageUnit PageScale
PageScale: 获取或设置此 Graphics 的世界单位和页单位之间的比例.PageUnit: 获取或设置用于此 Graphics 中的页坐标的度量单位. 话不多说,上代码: privat ...
- Python的split()函数
手册中关于split()用法如下: str.split(sep=None, maxsplit=-1) Return a list of the words in the string, usi ...
- 特殊的HttpApplication事件处理
在global.asax中,针对HttpApplication的事件处理,可以通过定义特殊命名的方法来实现.首先,这些方法必须符合System.EventHandler,因为所有的HttpApplic ...
- android eclipse 报error loading /system/media/audio/ xxx 错的解决办法。
只针对 报错..error loading /system/media/audio/ xxx.ogg 一步操作 解决烦恼..把 模拟器声音 关了..所有的错 都没了. 包括 关闭按键声音,触摸声音 ...
- [.net 多线程] Interlocked实现CAS操作
Interlocked:为多个线程共享的变量提供原子操作. Interlocked.Increment(ref value) 数值加一(原子性操作) Interlocked.Decrement(ref ...
- Go环境搭建(Windows)
下载MSI MSI地址 配置环境变量 GOPATH: 用于存放Go语言Package的目录,这个目录不能在Go的安装目录中 GOBIN: Go二进制文件存放目录,写成%GOROOT%\bin就好 PA ...
- JVM之类加载机制
JVM之类加载机制 JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程. 类加载五部分 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这 ...
- loj #6226. 「网络流 24 题」骑士共存问题
#6226. 「网络流 24 题」骑士共存问题 题目描述 在一个 n×n\text{n} \times \text{n}n×n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上 ...
- 自动备份数据库crond
#!/bin/bash # export and backup the abgent_web database.sql mysqldump -uuser -ppassword ltden_db --s ...