Effective STL 条款4

2024-05-29 04:18
文章标签 stl effective 条款

本文主要是介绍Effective STL 条款4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STL作为标准模板库,是程序员开发的利器,但是,在使用的过程中会因为使用不当,降低STL的效率。

本节就是一个简单的效率讨论,很简单,对于序列容器来说,如果你的目的是判断一个容器对象中是否有元素,有两种方法。分别如下:

方法一:

container a;if(0==a.size())

方法二:

container a;
if(a,empty())

那么,相对来说,这两个语句之间的区别在哪?
如果对于vector来说,它没什么区别,对于list来说它有区别,如果是list对象容器,因为list是由节点组成,所以,list对象中有多少个节点,需要遍历整个对象才能得出,方法一要花费线性的时间来处理(O(n)),而方法而只需要常数的时间完成。

本节条款的中心点不只是这两条语句,而是要让大家知道细节决定成败,一个优秀的程序员写的 程序必须兼具高效性和准确性。

这篇关于Effective STL 条款4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012618

相关文章

C++标准模板库STL介绍

STL的六大组成部分 STL(Standard Template Library)是 C++ 标准库中的一个重要组成部分,提供了丰富的通用数据结构和算法,使得 C++ 编程变得更加高效和方便。STL 包括了 6 大类组件,分别是算法(Algorithm)、容器(Container)、空间分配器(Allocator)、迭代器(Iterator)、函数对象(Functor)、适配器(Adapter)

STL迭代器的基础应用

STL迭代器的应用 迭代器的定义方法: 类型作用定义方式正向迭代器正序遍历STL容器容器类名::iterator 迭代器名常量正向迭代器以只读方式正序遍历STL容器容器类名::const_iterator 迭代器名反向迭代器逆序遍历STL容器容器类名::reverse_iterator 迭代器名常量反向迭代器以只读方式逆序遍历STL容器容器类名::const_reverse_iterato

如何使用STL中的模板类

在C++中,标准模板库(STL)提供了大量的模板类,这些类可以处理各种类型的数据,从而极大地提高了代码的复用性和灵活性。要使用STL中的模板类,你需要遵循一些基本的步骤和约定。 以下是一些使用STL模板类的基本步骤: 包含头文件: 首先,你需要包含相应的STL头文件,以便能够使用其中的模板类。例如,要使用std::vector,你需要包含<vector>头文件。 cpp复制代码 #incl

C++STL 初阶(5)vector的简易实现(上)

不同于string只实现一个最简单的版本,vector在此处我们要实现的是模版类,类模版的声明和定义分离非常不方便(会在链接时报错),所以我们都只在一个vector.h下去实现声明和定义。后续我们提及到的库里面实现的vector也是只有.h,没有.cpp      不过库中会将短的函数放在类里,如size、begin等(直接作为inline函数),大的如insert_aux就会放在

More Effective C++ 条款04:非必要不提供默认构造函数

所谓默认构造函数,就是不给任何变量,就可以给调用(无参或参数为默认值)。 基本准则:凡可以“合理地从无到有生成对象”的类,都应该包含默认构造函数,而“必须有某些外来信息才能生成对象”的类,则不必拥有默认构造函数。 但如果类缺乏一个默认构造函数,当你使用这个类时便会有某些限制。 考虑下面这个针对公司仪器而设计的class,在其中,仪器识别码是一定得有的一个构造参数: class Equipm

STL vector容器自己实现

本文参考了侯捷的 《STL 源码分析》一书,出于兴趣,自行实现了简单的 vector 容器。 之后会陆续上传 list, deque 等容器的代码,若有错误,欢迎留言指出。 vector 容易实现的几点注意事项: 1. 由于vector 是动态数组。 出于效率的考虑,在往vector 中加入元素时,内存的扩展遵循的规则是:    1> 如果当前可用内存不够,开 2倍大的内存,将原来

STL源码分析之大顶堆

关于大顶堆和小顶堆这里就不再介绍了,这里通过STL再次回顾一下。 heap为了适应容器大小的不断变化,底层调用vector实现 关于heap的算法(这里是大顶堆)   push_heap()算法 为了满足完全二叉树的条件,新加入的元素一定是放在最下一层作为叶节点,并填补在由左至右的第一个空格,即插在vector的end()处     我们通过上溯,将新节点与其父节点进

STL源码分析之vector容器

vector与array非常相似,两者唯一差别在于空间运用的灵活性          array是静态空间,一旦配置了就不能改变;若要改变使用的空间大小,一切琐碎由客户端自己来处理:先配置新空间,然后将元素从旧址一一搬到新址去,在退还原来的空间          vector则是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新的元素   以下为sgi vector源码:

[C++ STL] list 详解

标题:[C++ STL] vector 详解 @水墨不写bug  正文开始: 一、背景         C语言阶段,我们如果想要使用链表,需要自己手动实现一个链表。这是非常低效的做法,C++中的STL中提供了链表“ list ”,我们在包含头文件 <list> 后就可以直接使用。 二、容器简介         list是序列容器,允许在序列内的任何位置进行常量时间的

C++ STL ③

sort排序 #include <iostream>#include <algorithm>using namespace std;int main() {int a[5],i;cout<<"请输入数组元素:"<<endl;for(i=0;i<5;i++){cin>>a[i];}sort(a,a+5,greater<int>());for(i=0;i<5;i++){cout<<a[i]<<"