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 中的容器们(四)相关推荐

  1. STL中基本容器有: string、vector、list、deque、set、map

    为什么80%的码农都做不了架构师?>>>    在STL中基本容器有: string.vector.list.deque.set.map set 和map都是无序的保存元素,只能通过 ...

  2. stl中各种容器的自定义比较函数

    class elem { public:elem();elem(int aa):a(aa){} public:int a;int getA(){return a;} };class elem1 { p ...

  3. STL中算法锦集(四)

    STL中算法锦集(四) 文章目录 STL中算法锦集(四) 一.< algorithm > 1.std::is_permutation 2.std::is_sorted 3.std::is_ ...

  4. 算法求解中的变量、数组与数据结构(STL 中的容器)

    本质上算法都是对数据的操作,没有数据,没有存储数据的容器和组织方式,算法就是无源之水无本之木,就是巧妇也难为无米之炊.算法是演员,变量.数组.容器等就是舞台, 然后整个算法的处理流程,都是针对这些数据 ...

  5. STL 中的容器们 (二)

    STL 中的容器们 容器最后一个元素的迭代器 我们知道容器: .begin():第一个元素coll[0]的迭代器 .end():最后一个元素之前的元素的迭代器 所以容器最后一个元素的迭代器为:coll ...

  6. 关于STL中vector容器的一些总结

    第一个总结来自于http://www.jb51.net/article/41648.htm,第二个来自于http://www.cppblog.com/totti1006/archive/2009/09 ...

  7. C++ STL : 模拟实现STL中的容器适配器stack和queue

    目录 什么是容器适配器 stack stack的文档介绍-(来自cplusplus) stack的实现 queue queue的文档介绍-(来自cplusplus) queue的实现 什么是容器适配器 ...

  8. php的set 容器,关于STL中set容器的一些总结

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  9. C++ STL : 模拟实现STL中的容器适配器priority_queue

    目录 priority_queue 文档介绍 实现思路 思路 仿函数 实现 priority_queue 文档介绍 文档介绍 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含 ...

最新文章

  1. 数据分析工具Pandas(1):Pandas的数据结构
  2. 【元气云妹】有趣有料的云吞铺子,来一碗吗?
  3. CentOS系统bash: groupadd: command not found问题
  4. ML之UliR:利用非线性回归,梯度下降法(迭代十万次)求出学习参数θ,进而求得Cost函数最优值
  5. Spring的事件发布机制
  6. 查看Linux 下某个程序的内存情况
  7. ArrayList集合的使用和源码详细分析
  8. PAT 乙级 1009
  9. CATIA中使用约束时提示“创建的约束是临时的。若希望使他成为永久约束,则需要在单击确定按钮之前激活约束开关。”
  10. 上海通信管理局启动对手机清理软件问题调查
  11. 如何在SQL中对行进行动态编号
  12. RMI:Java中的分布式计算框架
  13. 算法设计 分析篇(摊销分析)
  14. 各地级市-国内及外汇旅游收入(1995-2020)
  15. QMQ源码分析之Actor
  16. 方维带货直播最新搭建教程《9》-常见问题总结
  17. 软件工程师是青春饭吗?
  18. SAP中 关于BAPI_MATERIAL_SAVEDATA创建物料报错:字段MARA-MEINS/BAPI_MARA-BASE_UOM(_ISO)被定义为必需的字段; 它不包含条目
  19. 普通磨削、超声辅助磨削表面形貌代码及表面轮廓提取
  20. xUnit.net入门

热门文章

  1. 人工智能之入门大数据
  2. Spark Shuffle详解剖析
  3. 大数据开发之Hadoop---初始Hadoop
  4. scala中的伴生对象,
  5. 循环取矩阵的某行_一文搞懂RNN(循环神经网络)基础篇
  6. CUDA 多GPU调用实现
  7. Linux IO原理和零拷贝机制
  8. Linux 平台中调试 C/C++ 内存泄漏方法
  9. 如何在VS2005下生成动态运行时库
  10. -bash: arm-uclinuxeabi-gcc: command not found