C++笔记-effective stl

这篇具有很好参考价值的文章主要介绍了C++笔记-effective stl。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

effective stl

熟悉stl本身

  • 慎重选择stl容器,每一种stl容器对应不同的使用场景,比如deque往往比vector更加合适
  • 封装stl容器,积极的使用stl,可以高效的使用它
  • 积极使用其对应迭代器使用的函数,比如做相加运算使用accumulate替代for循环,可以更加高效
  • 调用对应的函数的时候,不使用过于复杂的名称,防止C++编译机制出现错误
  • STL并非线程安全的。它不支持并发的写入。所以在写入之前记得上锁
  • 区别相等与等价:相等指的是里里外外完全相同,等价指的是可能只是外表相同
  • #include的文件总是可以反复编写,因为他的头部都带有ifdefine,完全不用担心
  • 当查询的操作和删除的操作几乎不混在一起的时候,排序的vector会比关联容器更好
  • 不去修改set/mutiset的吉安,修改他们可能会导致位置的行为
  • string的实现的多种多样,所以对应的大小也不是一样的

熟悉stl函数

  • 调用empty而不是size。因为empty始终是常数时间。而size有些时候则是on
  • 对于常见非关联容器,remove/remove-if和erase都是常见的删除用法,他能保证删除元素的同时改变容器大小。list使用remove,关联容器直接使用erase
  • 对于已知容器的大小,可以使用reserve减少string/vector类容器增长所需要的时间,减少不必要的分配
  • 使用swap函数对vector和string快速的放空有奇效,而且速度很快
  • 编写比较函数的时候,我们不仅要保证operator<和less要具有相同的意思,还更要保证要在等值的情况下返回false,保证一个严格的弱序化
  • 对于逐个字符的输入,可以使用istreambuf-iterator
  • 确保使用函数的时候,目标区间足够大,否则会导致一些未知的函数
  • 熟悉常见的排序函数,包括sort,patition等函数
  • 容器的成员函数优先于同名算法
  • 确保判别式是纯函数。考虑函数对象而不是函数作为stl算法的参数

熟悉STL容器内部的对象

  • 确保容器中的对象能高效的拷贝且正确。完整区分开深拷贝和浅拷贝
  • 对于容器中包括了纯指针,记得要在容器对象析构前挨个delete指针。或者使用share-ptr。当然还有remove-erase也是一样

文章来源地址https://www.toymoban.com/news/detail-801833.html

到了这里,关于C++笔记-effective stl的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • effective c++ 笔记

    TODO:还没看太懂的篇章 item25 item35 模板相关内容 可以将C++视为以下4种次语言的结合体: C 面向对象 模板 STL 每个次语言都有自己的规范,因此当从其中一个切换到另一个时,一些习惯或守则是可能会发生变化的。 用const替换#define有以下2个原因: #define定义的符号名称可能没

    2024年02月10日
    浏览(28)
  • 【数据结构与算法】C++的STL模板(迭代器iterator、容器vector、队列queue、集合set、映射map)以及算法例题

    更多算法例题链接: 【数据结构与算法】递推法和递归法解题(递归递推算法典型例题) 什么是迭代器(iterator) 迭代器(iterator)的定义: 迭代器是一种检查容器内元素并遍历元素的数据类型。 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。 容器

    2024年04月14日
    浏览(50)
  • effective c++ 笔记 条款18-25

    使用外覆类型(wrapper)提醒调用者传参错误检查,将参数的附加条件限制在类型本身 三个参数类型相同的函数容易造成误用 导入新的类型 限制取值 从语法层面限制调用者不能做的事 operate*的返回类型上加上const修饰,防止无意的错误赋值if (a * b = c) 接口应表现出与内置类型

    2024年02月21日
    浏览(43)
  • More Effective C++学习笔记(1)

    在任何情况下都 不能使用指向空值的引用 。一个引用必须总是指向某个对象,必须有初值。 如果变量指向 可修改,且有可能指向null ,就把变量设为 指针 ;如果变量 总是必须代表一个对象(不可能为null) ,就把变量设为 引用 。 引用可能比指针更高效 ,因为不必像指针

    2024年02月12日
    浏览(54)
  • 《Effective C++中文版,第三版》读书笔记7

    隐式接口: ​ 仅仅由一组有效表达式构成,表达式自身可能看起来很复杂,但它们要求的约束条件一般而言相当直接而明确。 显式接口: ​ 通常由函数的签名式(也就是函数名称、参数类型、返回类型)构成 ​ 在源码中明确可见。 编译期多态: 在编译时才能确定具体调

    2024年02月09日
    浏览(36)
  • effective c++ 43-处理模板化基类的名称 笔记

    该节主要分析了一个写模板时常常会遇到的一个编译错误。 这里有一个模板基类,有派生类继承了模板基类,并调用了基类中的方法,但是编译器却会报找不该方法,这是怎么回事? 编译输出如下: 从编译的输出也可以看出,原因是编译器觉得 sendClear 含义不明确,编译器

    2024年02月03日
    浏览(54)
  • 《Effective C++ 改善程序与设计的55个具体做法》读书笔记

    条款01 视C++为一个语言联邦 C Object-Oriented C++ Template C++ STL C++ 高效编程守则视情况而变化,取决于你使用 C++ 的哪一部分。 条款02 尽量与const,enum,inline替换#define 对于单纯常量,最好以 const 对象或 enums 替换 #defines 。 对于形似函数的宏( macros ),最好改用 inline 函数替换

    2024年02月12日
    浏览(33)
  • 数据结构笔记(c++版,期末复习)

      目录 一、绪论 1.数据结构基本概念 2.算法定义与特征 二、线性表 1.线性表的定义 2.顺序表的存储结构 3.链式存储结构 三、栈和队列 1、栈的基本概念 2.队列的基本概念 3.循环队列  四、字符串和多维数组 1.字符串的基本概念 2.串的简单模式匹配 3.多维数组 3.1数组的定义

    2024年02月12日
    浏览(49)
  • C语言笔记 | 数据结构入门指南

    文章目录 0x00 前言 0x01 百鸡百钱 0x1 题目描述 0x2 问题分析 0x3 代码设计 0x4 完整代码 0x5 运行效果 0x6 举一反三 [兔鸡百钱] 0x02 借书方案知多少 0x1 题目描述 0x2 问题分析 0x3 代码设计 0x4 完整代码 0x5 运行效果 0x6 举一反三 [领导小组方案] 0x03 打鱼还是晒网 0x1 题目描述 0x2 问题分

    2024年02月08日
    浏览(48)
  • 【学习笔记】数据结构算法文档(类C语言)

    1.1.1 线性表的顺序存储表示 1.1.2 顺序表中基本操作的实现 1.1.2.1 初始化 1.1.2.2 取值 1.1.2.3 查找 1.1.2.4 插入 1.1.2.5 删除 1.1.2.6 计数 1.2.1 单链表的定义和表示 ★ 关于结点 1.2.2 单链表基本操作的实现 1.2.2.1 初始化 1.2.2.2 取值 1.2.2.3 查找 1.2.2.4 插入 1.2.2.5 删除 1.2.2.6 前插法创建单

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包