i++ 和 ++i 效率的分析

我们通常在写for循环 的时候,要实现变量 i 的自增 1 ;往往会在i++ 和++i中随便挑一种写,对于i++和++i的理解,我们往往停留在返回的值的不同,其实i++与++i在实现效率上也有一定的不同(不考虑编译器优化的原因)。

++i的实现效率更高

解释如下:

i++ (在C++中) 在实现的时候,系统会产生一个 local object class INT的临时变量 用于存储原有的数据供返回值用;

 1 ++i 的实现方式
 2 INT INT::operator++()
 3 {
 4     *this = *this +1;
 5     return *this;
 6 }
 7
 8 i++的实现方式
 9
10 const INT INT::operator++(int)
11 {
12     INT oldvalue = *this;
13     *this = *this+1;
14     return oldvalue;
15 }

所以从效率上来说 ++i 比 i++来的更有效率。

说明:

1、在不考虑编译器优化的条件下,前缀(++i)比后缀(i++)要少一步开辟临时变量的操作,所以前缀效率更高。

2、对于内置数据类型,由于编译器优化的原因,前缀和后缀的效率没什么差别。

例如:对于 int 型变量,编译器可以优化掉开辟临时变量这份多余的工作。

3、对于自定义的数据类型(类),我们在使用 自增 运算符的时候,需要重载 ++ 运算符,在重载的时候,后缀要开辟一个临时变量,所以前缀的效率要比后缀的更高。

Stl中迭代器使用的是前缀。

时间: 2024-08-25 04:08:17

i++ 和 ++i 效率的分析的相关文章

基于OpenMP的矩阵乘法实现及效率提升分析

一.  矩阵乘法串行实现 例子选择两个1024*1024的矩阵相乘,根据矩阵乘法运算得到运算结果.其中,两个矩阵中的数为double类型,初值由随机数函数产生.代码如下: #include <iostream> #include <omp.h> // OpenMP编程需要包含的头文件 #include <time.h> #include <stdlib.h> using namespace std; #define MatrixOrder 1024 #def

SQL语句执行效率及分析(note)

1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step -- setp 1.-- 建表create table t_userinfo(userid int identity(1,1) primary key nonclustered,nick varchar(50) not null defa

多线程程序跑久了效率下降分析

最近在写一个搜索引擎,有个中间程序是分析分词结果文件,建立倒排索引.最初写的是单线程的,效率低到无语,于是又改成多线程的了.本以为万事大吉,可是在分析了将近2000文件的时候,效率低的和单线程的没什么区别了.打开任务管理器,线程数显示3(我设置的子线程数量最高为15,加上启动就有的,程序刚运行的时候线程数可以达到20个). 百度了下,Windows单个程序的线程数是有上限的,一般只能开到2000个左右.而我的程序中为了方便,把每个子线程都设置为detach状态了.这个状态下,线程结束时其他线程并

算法效率的分析--【以选择排序与冒泡排序为基础】

在前面我们实现了选择排序与冒泡排序的具体实现,现在我们从数学的角度分析下算法的效率问题: 首先我们把两种排序算法的概念重温一遍: 选择排序:在每一轮中,找出最小的元素放在他最终的位置.挺起来有些别扭,我们举个实例: eg:        8, 5,1, 20, 6, 3 1ed······  1, 5,8, 20, 6, 3 2ed······  1, 3, 8,20, 6,5 3ed······  1, 3,5, 20, 6, 8 4ed······  1, 3,  5, 6,  20,8 5

【PHP】php 递归、效率和分析(转)

递归的定义 递归(http:/en.wikipedia.org/wiki/Recursive)是一种函数调用自身(直接或间接)的一种机制,这种强大的思想可以把某些复杂的概念变得极为简单.在计算机科学之外,尤其是在数学中,递归的概念屡见不鲜.例如:最常用于递归讲解的斐波那契数列便是一个极为典型的例子,而其他的例如阶层(n!)也可以转化为递归的定义(n! = n*(n-1)!).即使是在现实生活中,递归的思想也是随处可见:例如,由于学业问题你需要校长盖章,然而校长却说“只有教导主任盖章了我才会盖章”

Solrj API索引效率对比分析

测试软件环境: 1.16G windows7 x64  32core cpu . 2.jdk 1.7  tomcat 6.x  solr 4.8 数据库软件环境: 1.16G windows7 x64  32core cpu . 2.Oracle 11g 一.Solr默认索引工具DIH. 使用Solr DIH索引数据,一千九百万数据,耗时45分钟左右,每秒钟6500条/s,合计39w条没分钟. 相关jvm最大堆内存为4G,solr index config使用默认参数. Solr DIH 导入截

(转)SQL语句执行效率及分析(note)

1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step -- setp 1.-- 建表create table t_userinfo(userid int identity(1,1) primary key nonclustered,nick varchar(50) not null defa

HashMap与HashTable源码学习及效率比较分析

一.个人学习后的见解: 首先表明学习源码后的个人见解,后续一次依次进行分析: 1.线程安全:HashMap是非线程安全的,HashTable是线程安全的(HashTable中使用了synchronized关键字进行控制),HashMap对应的线程安全的有concurrentHashMap,但如果不用concurrentHashMap的话,也可以只用Collections.synchronizedMap(Map)进行转换. 2.key值为null时的不同处理方式:HashMap允许key值为nul

mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考

数据量, 1300万的表加上112万的表 注意: 本文只做了部分优化,并不全面,仅供参考, 欢迎指点. 请移步tim查看,因为写的时候在tim写的,粘贴过来截图有问题,就直接上链接了. https://823948977.docs.qq.com/T5e6dBYLoZz?opendocxfrom=tim 文章内容类似截图: