`
tcspecial
  • 浏览: 911528 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

STL ++iter与iter++区别

阅读更多

 

 之前编码一直用的是iter++,同事说该方式效率比较低。带着疑惑看STL源码:

 

// vector

_Myiter& operator++()
	{	// preincrement
	++*(_Mybase *)this;
	return (*this);
	}

_Myiter operator++(int)
	{	// postincrement
	_Myiter _Tmp = *this;
	++*this;
	return (_Tmp);
	}

 

果不其然,++iter 前向表达式返回引用,而iter++返回的却是一临时对象。

原来前向后向重载表达式的差异,只是多了一个int参数。

 

// Test
class Test
{
public:
        Test():val(0){}
        ~Test(){}

        Test &operator++()
        {
                ++val;
                printf("Pre incr val:%d\n", val);
                return (*this);
        }

        Test operator++(int)
        {
                Test pTmp = *this;              // save
                val++;
                printf("Post incr val:%d\n", val);
                return pTmp;
        }

private:
        int val;
};

// main
int main()
{
        Test test;
        test++;
        ++test;
        return 0;
}

 

输出:

Post incr val:1

Pre incr val:2

 

 

 

 

分享到:
评论

相关推荐

    SGI STL源码.zip

    SGI STL,全称为Stanford Graphics Group Standard Template Library,是由SGI公司开发并推广的一套C++标准模板库。这个库极大地丰富了C++的容器、迭代器、算法和函数对象,为C++程序员提供了高效且灵活的抽象数据...

    iter:Go实现C ++ STL迭代器和算法

    重复去实现C ++ STL迭代器和算法。 更少的手写循环,更具表现力的代码。 README翻译:动机尽管Go没有泛型,但我们值得拥有可重用的通用算法。 iter可通过多种方式帮助改进Go代码: 一些简单的循环不太可能是错误的或...

    STL的应用简介

    例如,vector<string>::Iterator iter=vect.begin(),其中 iter 是一个迭代器,可以遍历 vector 容器中的元素。 4. STL 中的算法 STL 中的算法包括搜索、排序、删除、算术、关系和生成等。这些算法可以独立于容器,...

    使用stl 注意细节

    STL 使用注意细节 STL(Standard Template Library)是 C++ 编程语言中的一个标准库,提供了许多有用的容器、算法和迭代器,帮助开发者快速构建高效、可靠的程序。然而,使用 STL 需要注意一些细节,以避免常见的...

    STL tutorial

    4. **插入与删除**:`vec.insert(iter, value)`在迭代器iter位置插入元素,`vec.erase(iter)`删除迭代器所指元素。`vec.clear()`清空向量。 5. **迭代器遍历**:通过for循环遍历向量,例如: ```cpp for (auto it...

    CCF CSP 2017.03 第10次题目答案代码.docx

    - **方法四**:使用STL的`vector`,代码简洁且效率较高。 2. **代码实现**: - **方法四**(使用`vector`): ```cpp #include #include using namespace std; vector<int> v; int find(int x) { int ...

    c++ stl.docx

    - **equal_range()**: 返回一个包含两个迭代器的对,分别指向与给定值相等的第一个元素和最后一个元素之后的位置。 - **get_allocator()**: 返回一个用于管理集合内存分配的对象。 - **key_comp()** 和 **value_comp...

    STL使用例子代码集合

    STL(Standard Template Library,标准模板库)是C++编程中的一个重要组成部分,它提供了一组高效、可重用的数据结构和算法。这个压缩包“STL使用例子代码集合”包含了侯捷翻译的《C++标准程序库》一书中的代码示例...

    STL入门

    STL,全称为Standard Template Library,是C++标准库中的一个重要组成部分,主要提供了一组泛型容器、泛型算法和迭代器,以实现高效、灵活的编程。STL的使用可以极大地提高C++程序员的生产力,减少代码重复,并且...

    STL源码剖析.pdg

    第1章 stl 概论与版本简介001 1.1 stl 概论 001 1.1.1 stl的历史 003 1.1.2 stl与c++ 标准程序库 003 . 1.2 stl 六大组件 - 功能与运用 004 1.3 gnu源码开放精神 007 1.4 hp stl实现版本 009 1.5 p.j. ...

    STL实例教程

    其他如`memory`、`algo`、`iter`、`stl`等可能是包含具体实例和讲解的源代码文件,它们将帮助读者通过实践来学习STL的各种组件和用法。 学习STL实例教程可以帮助你更有效地利用C++的这些高级特性,提高代码质量和...

    iter_iter_initializer_list.rar_The Program

    【标题】"iter_iter_initializer_list.rar_The Program" 涉及的知识点主要集中在C语言编程、文件格式处理以及程序设计。在这个项目中,我们有多个源文件和头文件,它们共同构成了一个名为"The Program"的程序。让...

    STL 入门学习

    #### 一、STL简介与核心组件 STL(Standard Template Library,标准模板库)是C++标准库中的一个重要组成部分,它为程序员提供了丰富的数据结构和算法支持,极大地提高了编程效率。STL的核心组件包括算法(`...

    STL使用注意问题

    STL(Standard Template Library,标准模板库)是C++编程语言中的一个核心库,它提供了一组高效且通用的容器、算法和迭代器,方便程序员处理数据结构和算法。在STL中,`vector`、`map`和`list`是三种常见的容器,...

    c++容器的使用+代码.pdf

    C++容器是C++标准模板库(STL)中的一部分,提供了多种数据结构,用于存储和管理数据。在C++中,容器分为三类:顺序容器、关联容器和容器适配器。 顺序容器 顺序容器按照元素的顺序存储,支持随机访问。常见的顺序...

    常用STL模板的使用

    ### 常用STL模板的使用:深入解析与实践指南 #### 一、STL简介及重要性 STL(Standard Template Library)是C++标准库中的一个重要组成部分,它提供了一系列可重用的数据结构和算法,极大地简化了程序设计过程,...

    C++开源项目:模拟实现小型STL

    例如,`sort`用于对序列进行排序,`find`用于在序列中查找特定元素,`iter_swap`用于交换两个迭代器所指向的元素。 3. **函数对象(Functors)**:`functional`文件夹中的内容可能包含了函数对象的实现,如`greater...

    SGI STL deque相关代码

    与`vector`类似,`deque`内部也是通过动态分配内存来存储元素,但与`vector`不同的是,`deque`的数据不是连续存储的,而是分成多个块(chunk)存放,每个块内部元素是连续的。这样的设计使得在两端进行插入和删除...

    C++ STL开发技术导引(第5章)

    22.4 迭代器交换iter_swap 307 22.5 区间元素交换swap_ranges 308 22.6 元素变换transform 309 22.7 替换 310 22.8 条件替换replace_if 311 22.9 替换和复制replace_copy 312 22.10 条件替换和复制...

    STL 源码剖析(侯捷先生译著)

    这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚说明了书籍的定位和合适的读者,以及各类基础读物。如果你的Generic Programming/STL实力足以阅读本书...

Global site tag (gtag.js) - Google Analytics