Effective STL
本专栏内容来自于《Effective STL》书中的内容,介绍了50条有效使用STL的经验。在此,感谢本书的作者Scott Meyers以及译者潘爱民、陈铭、邹开红
董哥的黑板报
90后程序员!
展开
-
Effective STL第7条:容器之(如果容器内元素通过new创建,切记在容器对象析构前将指针delete掉(使用智能指针))
一、容器的析构 STL的容器相当聪明。当它们自身被析构时,它们会自动析构容器内所包含的每个对象 二、通过new操作符申请的元素导致的内存泄漏 但是,如果容器内的元素是通过new创建的,那么在释放容器的时候,指针的“析构函数”不会做任何事情,因此new所创建的内存就不会释放掉。如果不手动delete掉,那么就会造成内存泄漏 演示说明 下面vector容器内的每个元素通过new操作符创建 v...原创 2020-01-18 22:30:58 · 1008 阅读 · 0 评论 -
Effective STL第6条:容器之(当心C++编译器最烦人的分析机制(构造函数被误认为函数的问题))
前言(重点): 下面我们分析的问题现在已经得到解决了,C++现在允许使用大括号“{}”初始化来避免下面的问题。但是这一问题还是值得我们研究的 一、演示说明 假设我们有一个存放整型(int)的文件,你想把这些整数拷贝到一个list中,那么你可能会使用下面的做法 std::ifstream dataFile("ints.dat"); //使用list的区间构造函数来初始化list(C++编译器...原创 2020-01-14 20:18:54 · 2376 阅读 · 0 评论 -
Effective STL第5条:容器之(区间成员函数优先于与之对应的单元素成员函数)
一、案例引入 问题:如果有v1、v2两个矢量(vector形式的),现在要使v1的内容和v2的后半部分相同,那么你会使用什么方法? 解决方法 如果你的答案是调用assign方法(如下所示),那么你的答案是高效的 vector<int> v1; vector<int> v2; v1.clear(); //将v1容器的元素替换为v2指定迭代器区间的元素 v1.assi...原创 2020-01-14 19:40:58 · 971 阅读 · 0 评论 -
Effective STL第4条:容器之(调用empty()而不是检查size()是否为0)
一、检查容器是否为空(empty()、size()) 检查容器是否为空可以调用empty()或size() 例如下面两者等价 vector<int> c; if(c.size()==0) ... if(c.empty()) ... 二、选择empty()而不是size()是否为0 因为empty()通常实现为内联函数,并且empty仅仅返回size()是否...原创 2020-01-13 19:46:37 · 1056 阅读 · 0 评论 -
Effective STL第3条:容器之(确保容器中的对象拷贝正确而高效)
一、容器元素存取时带来的拷贝 一个概念:当你向容器中的存取一个对象时,实际上会伴随着拷贝操作 拷贝的情景: 当通过insert或push_back之类的操作向容器中加入对象时,是将对象拷贝一份进容器;当你使用容器中的一个对象时,是将对象拷贝出来使用 例如vector、string、deque进行元素的插入或删除时,现有元素的位置通常会移动(拷贝)(见第5、14条) 如果你使用后面任何...原创 2020-01-13 19:31:35 · 841 阅读 · 0 评论 -
Effective STL第2条:容器之(不要试图编写独立于容器类型的代码(附类型封装、容器封装))
一、STL是一套泛型编程 STL是以泛化原则为基础的: 数组被泛化为“以其包含的对象的类型为参数”的容器 函数被泛化为“以其使用的迭代器的类型为参数”的算法 指针被泛化为“以其指向的对象的类型为参数”的迭代器 容器类型被泛化为序列容器和关联容器。但是每种不同的容器所具备的特性是不同的 随着泛化的不断进行,有些人可能会视图编写独立于容器类型的代码,出发点是好的,但是会误入歧途,...原创 2020-01-13 17:42:47 · 912 阅读 · 0 评论 -
Effective STL第1条:容器之(慎重选择容器类型)
一、STL的容器概述 标准STL序列容器:vector、string、deque和list 标准STL关联容器:set、multiset、map、和multimap 非标准序列容器slist和rope:slist是一个单向链表,rope本质上是一“重型”string 非标准关联容器:hash_set、hash_multiset、hash_map和hash_multimap vector&...原创 2020-01-12 13:19:18 · 2251 阅读 · 1 评论