STL 中的容器们(四)
STL 中的容器们
for (int i = 0; i < coll.size()-1; ++i){...
}
上述代码的写法,coll.size()-1 语句是会出问题的,STL 的所有容器的 .size() 成员函数返回的类型都是无符号的 size_t,当容器内容为空时,无符号的 0 - 1,会变成 2^32-1;
1. 数组 vs vector
array 是静态空间,一旦配置了就不可改变;
要换大一点(小一点)的内存,也可以,但一切琐细得由客户端自己来:
- 配置新空间
- 数据移动
- 释放旧空间
vector 是动态空间,随着新元素的加入它的内部机制会自行扩充空间以容纳新元素。
可见 vector 要比 array 具有更大的灵活性,可是如果数据在使用数据容器存储之前就已知、确定不会发生改变,比如读入一幅图像。我们就未必一定使用 vector 来存储大小不会怎么变化的数据。
2. set / map 也即关联式容器需要指定排序规则
set 模板类的第二个模板类型参数,map 模板类的第三个模板类型参数,作为比较规则;默认为 less<T>
3. find(查找)函数的返回值的判断
对于 STL
容器的find
成员函数(其实好像也只有set
才支持find成员函数)或者字符串string
丰富的查找接口(find、find_first_of、find_last_of。。。)以及<algorithm>提供的全局的find
函数(搭配容器使用),在调用之后,首选进行的操作应是,查找成功与否的判断,这是一切后续操作的前提。
对
string
对象而言:std::string::size_type pos = str.find(...);// pos 的类型是无符号整型 if (pos != std::string::npos) { ... }
对
std::find()
全局的查找函数来说:auto pos = std::find(coll.begin(), coll.end(), val);// pos 是迭代器类型 if (pos != coll.end()) {... }
4. set 向 vector 的转化
set 转换为 vector 即可实现去重,也可实现排序。
std::set<int> s = {2, 1, 3, 3, 23, 4, 5};
std::vector<int> v(s.begin(), s.end());
STL 中的容器们(四)相关推荐
- STL中基本容器有: string、vector、list、deque、set、map
为什么80%的码农都做不了架构师?>>> 在STL中基本容器有: string.vector.list.deque.set.map set 和map都是无序的保存元素,只能通过 ...
- stl中各种容器的自定义比较函数
class elem { public:elem();elem(int aa):a(aa){} public:int a;int getA(){return a;} };class elem1 { p ...
- STL中算法锦集(四)
STL中算法锦集(四) 文章目录 STL中算法锦集(四) 一.< algorithm > 1.std::is_permutation 2.std::is_sorted 3.std::is_ ...
- 算法求解中的变量、数组与数据结构(STL 中的容器)
本质上算法都是对数据的操作,没有数据,没有存储数据的容器和组织方式,算法就是无源之水无本之木,就是巧妇也难为无米之炊.算法是演员,变量.数组.容器等就是舞台, 然后整个算法的处理流程,都是针对这些数据 ...
- STL 中的容器们 (二)
STL 中的容器们 容器最后一个元素的迭代器 我们知道容器: .begin():第一个元素coll[0]的迭代器 .end():最后一个元素之前的元素的迭代器 所以容器最后一个元素的迭代器为:coll ...
- 关于STL中vector容器的一些总结
第一个总结来自于http://www.jb51.net/article/41648.htm,第二个来自于http://www.cppblog.com/totti1006/archive/2009/09 ...
- C++ STL : 模拟实现STL中的容器适配器stack和queue
目录 什么是容器适配器 stack stack的文档介绍-(来自cplusplus) stack的实现 queue queue的文档介绍-(来自cplusplus) queue的实现 什么是容器适配器 ...
- php的set 容器,关于STL中set容器的一些总结
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...
- C++ STL : 模拟实现STL中的容器适配器priority_queue
目录 priority_queue 文档介绍 实现思路 思路 仿函数 实现 priority_queue 文档介绍 文档介绍 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含 ...
最新文章
- 数据分析工具Pandas(1):Pandas的数据结构
- 【元气云妹】有趣有料的云吞铺子,来一碗吗?
- CentOS系统bash: groupadd: command not found问题
- ML之UliR:利用非线性回归,梯度下降法(迭代十万次)求出学习参数θ,进而求得Cost函数最优值
- Spring的事件发布机制
- 查看Linux 下某个程序的内存情况
- ArrayList集合的使用和源码详细分析
- PAT 乙级 1009
- CATIA中使用约束时提示“创建的约束是临时的。若希望使他成为永久约束,则需要在单击确定按钮之前激活约束开关。”
- 上海通信管理局启动对手机清理软件问题调查
- 如何在SQL中对行进行动态编号
- RMI:Java中的分布式计算框架
- 算法设计 分析篇(摊销分析)
- 各地级市-国内及外汇旅游收入(1995-2020)
- QMQ源码分析之Actor
- 方维带货直播最新搭建教程《9》-常见问题总结
- 软件工程师是青春饭吗?
- SAP中 关于BAPI_MATERIAL_SAVEDATA创建物料报错:字段MARA-MEINS/BAPI_MARA-BASE_UOM(_ISO)被定义为必需的字段; 它不包含条目
- 普通磨削、超声辅助磨削表面形貌代码及表面轮廓提取
- xUnit.net入门