`
xuning2516
  • 浏览: 7501 次
  • 性别: Icon_minigender_1
  • 来自: 江西
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

C++ stl 通用算法和成员函数使用

 
阅读更多

在stl中既有通用函数,又有相同成员函数主要表现在list中。

以remove为例

    list<int> coll;

    // insert elements from 6 to 1 and 1 to 6
    for (int i=1; i<=6; ++i) {
        coll.push_front(i);
        coll.push_back(i);
    }

    // print all elements of the collection
    cout << "pre:  ";
    copy (coll.cbegin(), coll.cend(),         // source
          ostream_iterator<int>(cout," "));   // destination
    cout << endl;

    // remove all elements with value 3
    remove (coll.begin(), coll.end(),         // range
            3);    
开始是list中的元素为6 5 4 3 2 1 1 2 3 4 5 6

remove之后变成6 5 4 2 1 2 4 5 6 5 6

remove算法具有linear complexity是将容器中的等于value的值得元素使用后续的元素进行替换,这就需要进行deference。因此只是调整元素的位置,而不是真正的删除。

函数返回的是A forward iterator addressing the new end position of the modified range, one past the final element of the remnant sequence free of the specified value

然而在list中也提供了一个remove的成员函数,他是直接删除元素。它删除元素不需要移动元素,只需要进行相应的指针操作。因此具有更好的性能。

template <class _Tp, class _Alloc>
void list<_Tp, _Alloc>::remove(const _Tp& __value)
{
  iterator __first = begin();
  iterator __last = end();
  while (__first != __last) {
    iterator __next = __first;
    ++__next;
    if (*__first == __value) erase(__first);
    __first = __next;
  }
}


所以在选择通用算法和成员函数时,比较具有good performance(具有constant or linear complexity)。

分享到:
评论

相关推荐

    C++STL程序员开发指南【可搜索+可编辑】

    第二篇C++ STL 技术原理和组成 第3 章STL 技术原理· · · · · · · · · · · · · · · · · ·................................. 103 3-1 模板概述· · · · · · • · · · · · · · · · ·...

    stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)

    算法由模板函数体现,这些函数不是容器类的成员函数,是独立的函数,它们可以用于STL容器,也可以用于普通的C++数组等. 头文件:#include 在STL的泛型算法中有4类基本的算法: 1)变序型队列算法: 可以改变容器内的数据...

    C++标准程序库STL的架构

    8.2.2 针对成员函数而设计的函数配接器 83 9 STL算法 85 9.1 算法头文件 85 9.2 算法概览 85 9.2.1 简介 85 9.2.2 算法分类 85 9.3 辅助函数 85 9.4 for_each()算法 86 9.5 非变动性算法 88 9.5.1 元素计数 88 9.5.2...

    C++ 大学自学教程 C++ 大学教程 第7版 2

    一共分为四部分 第一部分 C++语言 1,C++程序设计概述 ...33,通用算法 34,迭代器 第五部分 高级问题 35,异常处理 36,名字空间 37,C++类型强制转换 38,运行时类型信息 39,区域表示 40,面向对象程序设计

    c++大学自学教程 c++大学教程 第七版1

    一共同分为四部分, C++ 大学自学教程(第7版) 目录 ...33,通用算法 34,迭代器 第五部分 高级问题 35,异常处理 36,名字空间 37,C++类型强制转换 38,运行时类型信息 39,区域表示 40,面向对象程序设计

    c++大学自学教程 c++大学教程 第七版 4

    一共同分为四部分, C++ 大学自学教程(第7版) 目录 ...33,通用算法 34,迭代器 第五部分 高级问题 35,异常处理 36,名字空间 37,C++类型强制转换 38,运行时类型信息 39,区域表示 40,面向对象程序设计

    c++大学自学教程 c++大学教程 第七版 3

    一共同分为四部分, C++ 大学自学教程(第7版) 目录 ...33,通用算法 34,迭代器 第五部分 高级问题 35,异常处理 36,名字空间 37,C++类型强制转换 38,运行时类型信息 39,区域表示 40,面向对象程序设计

    -C++参考大全(第四版) (2010 年度畅销榜

    23.4 const成员函数与mutable 23.5 volatile成员函数 23.6 explicit构造函数 23.7 成员初始化语法 23.8 利用关键字asm 23.9 连接说明 23.10 基于数组的I/O 23.11 C与C++的区别 第24章 标准模板库 24.1 STL概述 24.2 ...

    摩托罗拉C++面试题

    它体现了一种通用和泛化的思想。 STL有7种主要容器:vector,list,deque,map,multimap,set,multiset. 17.你如何理解MVC。简单举例来说明其应用。 MVC模式是observer 模式的一个特例,典型的有MFC里面的文档视图架构...

    C++编程思想(第2版 第2卷)

    介绍C++的字符串、输入输出流、STL算法、容器和模板的现代用法,包括模板元编程;解释多重继承问题的难点,展示RTTI的实际使用,描述了典型的设计模式及其实现,特别介绍被认为是标准C++下一版特征之一的多线程处理...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

     ·分享c++程序的错误查找技术,并介绍通用的调试原则讨论每一个windows应用程序的结构和基本元素  ·举例说明如何使用mfc开发本地windows应用程序  ·指导读者用c++和c++/cli设计和创建大量的windows应用程序 ...

    传智播客扫地僧视频讲义源码

    11_项目中检索内存泄漏使用和基本原理 12_动态库基本知识和环境调试注意 13_动态库内存释放问题 源码及文档 01_上一次课程回顾 02_链表热身_结构体中套元素和指针 03_结构体数据类型的嵌套定义和函数的嵌套调用是两...

Global site tag (gtag.js) - Google Analytics