之前编码一直用的是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
相关推荐
重复去实现C ++ STL迭代器和算法。 更少的手写循环,更具表现力的代码。 README翻译:动机尽管Go没有泛型,但我们值得拥有可重用的通用算法。 iter可通过多种方式帮助改进Go代码: 一些简单的循环不太可能是错误的或...
例如,vector<string>::Iterator iter=vect.begin(),其中 iter 是一个迭代器,可以遍历 vector 容器中的元素。 4. STL 中的算法 STL 中的算法包括搜索、排序、删除、算术、关系和生成等。这些算法可以独立于容器,...
STL 使用注意细节 STL(Standard Template Library)是 C++ 编程语言中的一个标准库,提供了许多有用的容器、算法和迭代器,帮助开发者快速构建高效、可靠的程序。然而,使用 STL 需要注意一些细节,以避免常见的...
4. **插入与删除**:`vec.insert(iter, value)`在迭代器iter位置插入元素,`vec.erase(iter)`删除迭代器所指元素。`vec.clear()`清空向量。 5. **迭代器遍历**:通过for循环遍历向量,例如: ```cpp for (auto it...
- **方法四**:使用STL的`vector`,代码简洁且效率较高。 2. **代码实现**: - **方法四**(使用`vector`): ```cpp #include #include using namespace std; vector<int> v; int find(int x) { int ...
- **equal_range()**: 返回一个包含两个迭代器的对,分别指向与给定值相等的第一个元素和最后一个元素之后的位置。 - **get_allocator()**: 返回一个用于管理集合内存分配的对象。 - **key_comp()** 和 **value_comp...
STL(Standard Template Library,标准模板库)是C++编程中的一个重要组成部分,它提供了一组高效、可重用的数据结构和算法。这个压缩包“STL使用例子代码集合”包含了侯捷翻译的《C++标准程序库》一书中的代码示例...
STL,全称为Standard Template Library,是C++标准库中的一个重要组成部分,主要提供了一组泛型容器、泛型算法和迭代器,以实现高效、灵活的编程。STL的使用可以极大地提高C++程序员的生产力,减少代码重复,并且...
第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. ...
其他如`memory`、`algo`、`iter`、`stl`等可能是包含具体实例和讲解的源代码文件,它们将帮助读者通过实践来学习STL的各种组件和用法。 学习STL实例教程可以帮助你更有效地利用C++的这些高级特性,提高代码质量和...
【标题】"iter_iter_initializer_list.rar_The Program" 涉及的知识点主要集中在C语言编程、文件格式处理以及程序设计。在这个项目中,我们有多个源文件和头文件,它们共同构成了一个名为"The Program"的程序。让...
#### 一、STL简介与核心组件 STL(Standard Template Library,标准模板库)是C++标准库中的一个重要组成部分,它为程序员提供了丰富的数据结构和算法支持,极大地提高了编程效率。STL的核心组件包括算法(`...
STL(Standard Template Library,标准模板库)是C++编程语言中的一个核心库,它提供了一组高效且通用的容器、算法和迭代器,方便程序员处理数据结构和算法。在STL中,`vector`、`map`和`list`是三种常见的容器,...
C++容器是C++标准模板库(STL)中的一部分,提供了多种数据结构,用于存储和管理数据。在C++中,容器分为三类:顺序容器、关联容器和容器适配器。 顺序容器 顺序容器按照元素的顺序存储,支持随机访问。常见的顺序...
### 常用STL模板的使用:深入解析与实践指南 #### 一、STL简介及重要性 STL(Standard Template Library)是C++标准库中的一个重要组成部分,它提供了一系列可重用的数据结构和算法,极大地简化了程序设计过程,...
例如,`sort`用于对序列进行排序,`find`用于在序列中查找特定元素,`iter_swap`用于交换两个迭代器所指向的元素。 3. **函数对象(Functors)**:`functional`文件夹中的内容可能包含了函数对象的实现,如`greater...
与`vector`类似,`deque`内部也是通过动态分配内存来存储元素,但与`vector`不同的是,`deque`的数据不是连续存储的,而是分成多个块(chunk)存放,每个块内部元素是连续的。这样的设计使得在两端进行插入和删除...
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 条件替换和复制...
这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚说明了书籍的定位和合适的读者,以及各类基础读物。如果你的Generic Programming/STL实力足以阅读本书...
C++ 中 STL 中的 map 用法详解 map 是 STL 中的一个关联容器,它提供了一对一的数据处理能力。它的特性是每个关键字只能在 map 中出现一次,第二个可能称为该关键字的值。这个特性使得 map 在处理一对一数据的时候...