[置顶] Effective STL 学习笔记】的更多相关文章

看Effective STL 作的一些笔记,希望对各位有帮助. 以下是50条条款及相关解释. 容器 1. 慎重选择容器类型,根据需要选择高效的容器类型. 2. 不要试图编写独立于容器类型的代码. 3. 确定容器中的对象拷贝正确而高效.也就是防止在存在继承关系时发生剥离. 4. 调用empty而不是检查size()是否为0来判断容器是否为空.原因是调用empty比检查size()更加高效. 5. 尽量使用区间成员,而不是多次使用与之对应的单元素成员函数,原因是这样更加高效.如尽量使用vector的…
Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} Table of Contents 记得 Remove 后要 Erase remove, container, pointer 1 记得 Remo…
Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#2e3436; color:#fefffe; } p {font-size: 15px} li {font-size: 15px} Table of Contents Make Predicate pure Function Make Funct…
Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} 严格来讲, C 和 C++ 都不支持将函数作为参数,真正作为…
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} 有些个算法对有序的和无序的数据都能应用,但多数情况下,他们在输入数据有序时才最有用. 下列算法要求输入数据必须有序…
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} Table of Contents partial_sort nth_element stability partition 总结 1 parti…
Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: monospace; } p {font-size: 15px} li {font-size: 14px} Table of Contents 1. 容器区间与算法 2. back_inserter 3. front_inserter 4. inserter 5. inserter & reserve…
Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div.org-src-container { font-size: 85%; font-family: monospace; } Table of Contents 1. Iterator 的类型 2. 迭代器之间的转换 3. Iterator is Special 4. 总结: 1 Iterator 的类型…
Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monospace; } Table of Contents 1. 避免 \(set \& multiset\) 在原位改变 Key 2. Consider replacing associative containers with sorted vectors 3. Choose carefully betw…
Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; font-family: monospace; } Table of Contents 1. Always have comparison functions return false for equal values 2. Strict Weak Ordering 1 Always have compar…
Effective STL 学习笔记:19 ~ 20 */--> div.org-src-container { font-size: 85%; font-family: monospace; } Table of Contents 1. Item 19: 相等 (Equality) 与等价 (Equivalence) 2. Item 20: Specify Comparison Type for Associative containers of pointers 1 Item 19: 相等…
Effective STL 学习笔记: 多用 vector & string 如果可能的话, 尽量避免自己去写动态分配的数组,转而使用 vector 和 string . 原书作者唯一想到的一个不用 string 的可能的理由,就是 string 所使用的引用计数 (reference counting) 在多线程下可能会因为并发控制反而导致性能下降.我们可以通过查看文档或者 STL 源面的方法来看 String 是否引入了引用计数,如果 string 在多线程下真的因为引用计数而导致了性能下降…
一.文章来由 好久没写原创博客了,一直处于学习新知识的阶段.来新加坡也有一个星期,搞定签证.入学等杂事之后,今天上午与导师确定了接下来的研究任务,我平时基本也是把博客当作联机版的云笔记~~如果有写的不对的地方,欢迎批评指正. 二.<一天搞懂深度学习> 300多页的PPT,台大教授写的好文章. 对应的视频地址 1.Lecture I: Introduction of Deep Learning (1)machine learning≈找函数 training和testing过程 (2)单个神经网…
Table of Contents 1. STL, Thread and SGI 2. STL and Lock 2.1. RAII 2.2. Use Lock in STL 1 STL, Thread and SGI C++98 以及之前的 C++ 标准中,并未对线程做出过规定,但对于 STL 来讲,SGI 做出了自己的规定,很多其他的 STL 实现也遵循这些规定: The SGI implementation of STL is thread-safe only in the sense t…
好了,先贴一段英文,真心不想翻译过来,而且感觉也翻译不到那么到位: The STL is awash in comparisons of objects to see if they have the same value. For example, when you ask find to locate the first object in a range with a particular value, find has to be able to compare two objects…
vector<bool> 看起来像是一个存放布尔变量的容器,但是其实本身其实并不是一个容器,它里面存放的对象也不是布尔变量,这一点在 GCC 源码中 vector<bool> 的注释中写的很清楚: /** * @brief A specialization of vector for booleans which offers fixed time * access to individual elements in any order. * * Note that vector&…
假设有若干对象存于一个 vector 中: class Widget; vector<Widget> vw; 后来由于某些原因,从该容器中删除了若干对象(参考erase-remove idiom ).对于 vector 和 string 来讲, erase() 和 clear() 并不会改变容器的capacity,也就不会改变他们的内存占用. swap() 本意是用来交换两个容器的内容( Iterators, pointers, and references),但我们可以用他来快速将容器的 c…
有时需要支持 C 的接口,但这并不复杂. 对于 vector 来讲, \(v[0]\) 的地址 \(\&v[0]\) 即可作为数组指针传递给 C API: 1: // Legacy C API. 2: extern void doSomething(const int* pInts, size_t numInts); 3: 4: vector<int> v; 5: // ... 6: // Operations on v. 7: // ... 8: 9: if (!v.empty())…
vector 和 string 容器在动态插入一个新的对象时,如果容器内空间不够,该容器会: 重新分配空间 通常的做法是分配当前 Capacity 大小两倍的空间. 将旧空间中的所有元素拷贝进新的空间中. 销毁原有空间中存储的对象. 销毁原有的空间. 可见一个简单的操作背后实际可能会有许多动作. 例如如果想创建一个容器让其存放 1 - 1000 这 1000 个 int 值,如果用下面的方法: vector<int> v; for (int i = 1; i < 1001; ++i) {…
假设我们现在有以下代码: void doSomething() { vector<Widget*> vwp; ; i < SOME_MAGIC_NUMBER; ++i) vwp.push_back(new Widget); ... // use vwp } // Widgets are leaked here! 代码中的Widget为一个类,显然,此段代码会造成内存泄露.函数执行结束之后,每一个vwp的元素会被destroy, 但是并不会delete我们使用的Widget对象.Oh, n…
Q:假设我们现在需要一个string*的set,我们向其插入一些动物到这个set中: set<string*> ssp; // ssp = “set of string ptrs” ssp.insert(new string("Anteater")); ssp.insert(new string("Wombat")); ssp.insert(new string("Lemur")); ssp.insert(new string(&qu…
使用reserve来避免不必要的重新分配! The reserve member function allows you to minimize the number ofreallocations that must be performed, thus avoiding the costs of reallocationand iterator/pointer/reference invalidation. 使用size函数获取容器中的元素个数,使用capacity函数获取容器已分配的内容可…
Effective STL 读书笔记 标签(空格分隔): 未分类 慎重选择容器类型 标准STL序列容器: vector.string.deque和list(双向列表). 标准STL管理容器: set.multiset.map和multimap. 非标准STL序列容器: slist(单向列表)和rope(重型字符串?). 非标准STL关联容器: hash_set.hash_multiset.hash_map和hash_multimap.(c++11引入了unordered_set.unordere…
Effective STL 读书笔记 本篇文字用于总结在阅读<Effective STL>时的笔记心得,只记录书上描写的,但自己尚未熟练掌握的知识点,不记录通用.常识类的知识点. STL按照容器类型,可以分为标准序列容器(deque,vector,list,string),标准关联容器(map,multimap,set,multiset),另外,还有非标准容器,序列类型有slist和rope,关联类型有hash_**类相关容器.标准关联容器总是保持排列顺序. 在关联容器中,确保关联容器对于所使…
笔者作为计算机科学与技术专业的学生,学习并使用C++已经有3年了.在接触STL之前的编程习惯是,所有程序的功能包括数据结构.算法等都是亲自实现,效率极其缓慢.后来从使用STL的vector开始慢慢的感觉,如果能了解更多的C++库,并会合理组合各种现有的容器和算法,那么开发效率大大提升!只学会C++的语法根本算不上是学会了C++.正如Scott Meyers在<Effective C++>中说道,要视C++为一个语言的联邦!在这里,笔者作为自己的学习笔记,把所学的知识记录下来,希望以后可以复习,…
最近又温习了一遍Linux中的信号知识,发现有很多东西以前没有注意到,就通过这篇博客记录一下,巩固一下知识点. 一,信号基础: 信号是什么?为了回答这个问题,首先要从异常说起,这里的异常不是指c++/java中的Exception,而是指控制流的一种突变. 控制流指一个程序的指令序列,它在最简单的情况是平滑的,意味着上一条指令地址和下一条指令地址在存储器中是相邻的,但是程序也可以通过跳转,函数调用和函数返回来造成控制流产生突变,这是一种必要的机制,使得程序能够对由程序变量表示的内部程序中的变化做…
排序算法 C++ STL 的排序算法(Sorting algorithms)是一组将无序序列排列成有序序列的模板函数或与排序相关的模板函数,提供了排序.折半搜索.归并.集合操作.堆操作.最值求解.字典比较和排列组合等功能.     排序算法一般要求容器提供随机访问迭代器,一般适用于序列容器,如向量容器.队列容器和字符串容器等,但不适用于内部数据结构较为复杂的关联容器,如集合容器.映照容器.哈希集合容器和哈希映照容器等(有些容器是 SGI C++ STL里面的,在编译器自带的STL里面没有,这里不…
10.2.8 Set和multiset容器 set/multiset的简介 ²  set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. ²  set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树.在插入操作和删除操作上比vector快. ²  set不可以直接存取元素.(不可以使用at.(pos)与[]操作符). ²  multiset与set的区别:set支持唯一键值,每个元素值只能出现一次:而multiset中…
10.2.7优先级队列priority_queue v  最大值优先级队列.最小值优先级队列 v  优先级队列适配器 STL priority_queue v  用来开发一些特殊的应用,请对stl的类库,多做扩展性学习 priority_queue<int, deque<int>>   pq; priority_queue<int, vector<int>>   pq; pq.empty() pq.size() pq.top() pq.pop() pq.pu…
关联式容器依据特定的排序准则,自动为其元素排序.缺省情况下以operator<进行比较.set multiset map multimap是一种非线性的树结构,具体的说是采用一种比较高效的特殊平衡检索二叉树--红黑树结构. 1.set set和multiset会根据特定的排序准则,自动将元素排序.两者的不同处在于multiset允许元素重复,而set不允许. template<class _Kty, class _Pr = less<_Kty>, class _Alloc = al…