随笔分类 - STL
摘要:并不存在从 const_iterator 到 iterator 之间的隐式转换 一种安全的、可移植的方法获取他所对应的 iterator: 要得到与 const_iterator 指向同一位置的 iterator,首先将 iterator 指向容器的起始位置,然后把它向前移到和 const_iter
阅读全文
摘要:每个标准容器类都提供四种迭代器类型,对于container<T>而言: 有些方法只接受 iterator 类型的参数 图片显示了从iterator到const_iterator、从iterator到reverse_iterator和从reverse_iterator到const_reverse_it
阅读全文
摘要:散列容器: unordered_set、unordered_multiset、unordered_map、unordered_multimap
阅读全文
摘要:假设有一个支持默认构造函数以及从一个 double 构造和赋值的 Widget 类: 现在让我们假设我们想建立一个从 int 到 Widget 的 map,初始化有特定值的映射: map::operator[] 被设计为简化 “添加或更新” 功能。即,给定 检查键 k 是否已经在 map 里,如果不
阅读全文
摘要:标准关联容器的典型实现是平衡二叉查找树, 一个平衡二叉查找树是一个对插入、删除和查找的混合操作优化的数据结构 1. 建立。通过插入很多元素建立一个新的数据结构 2. 查找。在数据结构中查找指定的信息片。 3. 重组。修改数据结构的内容,也许通过删除所有现有数据和在原地插入新数据。 有时,一个 vec
阅读全文
摘要:正如所有标准关联容器,set 和 multiset 保持它们的元素有序,容器的正确行为依赖于它们保持有序,如果改变一个元素的值,新值不在正确的位置,将破坏容器的有序性。 对于 map 和 multimap 容器,改变容器里一个键值的程序不能编译, map<K, V> 或 multimap<K, V>
阅读全文
摘要:除非比较函数总是为相等的值返回 false,否则将会打破所有的标准关联容器, 不管关联容器是否允许存在副本(set、map、multiset、multimap) 对于(set、map)使用 less_equal (<=): 结果为 false,当 insert(10A) 与 insert(10B)
阅读全文
摘要:对于 string* 指针的 set,打印 set <string*> ssp 内容: 前一种循环的方式 *i 是指针。即使用 **i 替代,set 建立时按指针排序 copy的方式,编译器检测到迭代器传递的 string* 与ostream_iterator 需要打印对象不匹配。 string*
阅读全文
摘要:find 算法和 set 的 insert 成员函数是很多必须判断两个值是否相同的函数代表, find 对 “相同” 的定义是相等,基于 operator== , set::insert 对 “相同” 的定义是等价,通常基于 operator< 。 操作上来说,相等的概念基于 operator==
阅读全文
摘要:作为一个 STL 容器,vector<bool> 确实只有两个问题: 1. 它不是一个STL容器 2. 它并不容纳 bool 一个东西不能成为STL容器只因为会有人说它是(哈哈哈哈哈哈) vector不能编译下式: 因为vector<bool> 打包 bool 以节省空间,每个保存在“vector”
阅读全文
摘要:避免 vector 持有它不再需要的内存,你需要把它从曾经最大的容量减少到它现在需要的容量。这样的减少容量的方法常被称为“收缩到合适”。可以这样做: vector 的复制构造函数拷贝数据到临时vector,这个临时vector没有多余的容量,交换后,销毁 同样技巧用于 string: 收缩到合适意味
阅读全文
摘要:已经存在的遗留的 C 风格 API 接受的是数组和 char* 指针,这样的 API 函数还将会存在很长时间,如果我们要有效使用 STL 的话,就必须和它们和平共处。 如果有一个 vector 对象 v,而你需要一个指向 v 中数据的指针,以使得它可以被当作一个数组,只要 &v[0] 就可以了。对于
阅读全文
摘要:每个 string 实现都容纳了下面的信息: 1. 字符串的大小,也就是它包含的字符的数目; 2. 容纳字符串字符的内存容量; 3. 这个字符串的值,也就是,构成这个字符串的字符。 另外,一个字符串可能容纳: 1. 它的配置器的拷贝; 2. 依赖引用计数的 string 实现也包含了这个值的引用计数
阅读全文
摘要:对于vector和string,当需要更多的空间,以realloc等价的思想来增长。类似于realloc的操作有四个部分: 1. 分配新的内存块,它有容器目前容量的几倍。大部分实现中,vector和string的容量以2为因数增长。 也就是说,当容器必须扩展时,它的容量每次翻倍。 2. 把所有元素从
阅读全文
摘要:无论何时,准备动态分配一个数组,应该首先考虑使用一个 vector 或一个 string,vector 和 string 管理自己的内存,当元素添加到容器时,他们的内存会增长,而且当一个 vector 或 string 销毁时,它的析构函数会自动销毁容器中的元素,回收存放那些元素的内存。 vecto
阅读全文
摘要:标准C++的世界是相当保守和陈旧的。在这个纯洁的世界,所有可执行文件都是静态链接的。不存在内存映射文件和共享内存。没有窗口系统,没有网络,没有数据库,没有其他进程。在这种情况下,当发现标准没有提到任何关于线程的东西时你不该感到惊讶。你对STL的线程安全有的第一个想法应该是它将因实现而不同。 在STL
阅读全文
摘要:还没理解。。。。。。 回头再来
阅读全文
摘要:去除一个容器中有特定值的所有对象: 如果容器是 vector、string 或 deque,使用 erase-remove惯用法 c.erase( remove( c.begin(), c.end() , val), c.end() ); // remove() 函数,将值不为 val 的元素前移,
阅读全文
摘要:当拷贝一个 auto_ptr 时,auto_ptr 所指向对象的所有权被转到拷贝的 auto_ptr,而被拷贝的 auto_ptr 被设为 NULL。 拷贝一个 auto_ptr 将改变它的值,不要建立 auto_ptr 容器: vector< auto_ptr<Widget> > // Don`t
阅读全文
摘要:STL 容器非常优秀。它们提供了前向和逆向遍历的迭代器(通过 begin、end、rbegin等);它们能告诉你所容纳的对象的类型(通过 value_type 和 typedef);在插入和删除中,它们负责任何需要的内存管理;它们报告容纳了多少对象和最多容纳的数量(分别通过 size 和 max_s
阅读全文

浙公网安备 33010602011771号