首页 > 编程语言 >C++笔记(自用)

C++笔记(自用)

时间:2022-12-09 14:13:24浏览次数:46  
标签:函数 推导 型别 auto 笔记 自用 C++ template 使用

《Effective C++》

条款11 在operator=中处理“自我赋值”

自我赋值

证同测试:

if(this==&rhs)return*this;

影响并行处理效率

记住副本:

type* memberO=member;
pmember=new type(*rhs.member);
delete memberO;
return *this;

copy and swap:

class_type temp(rhs);
swap(rhs);
return *this;

条款30看不明白

条款39:明智而审慎地使用private继承

private继承只是一种代码实现方式而没有任何的意味

如果需要一个不含virtual函数和non-static成员变量的空基类,则可以使用private继承,表示EBO(empty base optimization,空白基类最优化)

条款40:明智而审慎地使用多重继承

钻石继承可以用virtual public解决

virtual bases的继承体积会变大,速度会变慢,所以尽量不要用,如果要用,尽可能避免在其中放置数据,类似于Java的接口

条款41:了解隐式接口和编译器多态

  • 对classes而言接口是显式的,以函数签名为中心,多态则是通过virtual函数发生于运行期。
    • 理解为classes定义完函数后,运行时通过virtual函数调用不同子类的函数。
  • 对template参数而言,接口是隐式的,奠基于有效表达式。多态则是通过template具现化和函数重载解析(function overloading resolution)发生于编译期。
    • 理解为template定义完函数后,只有拥有函数内调用的成员函数的类才能使用template函数,而在编译期内,就需要告知template使用的什么类。

《STL源码剖析》

特化:开一个特殊的模版类

const解引用获得右值

vector

第一个元素获得1,否则扩容成两倍,搬移

deque

为多个缓冲区,sort时先搬到一个vector然后排序完搬回,使用一个索引表保存缓冲区

stack

template<class T,class Sequence=deque<T> >

默认底层实现为deque,可以传参实现其他构造

stack不提供迭代器

queue

同stack

heap

使用vector实现的堆,也可以使用array

priority_queue

底部是max-heap

slist

单向链表

set

底层红黑树,使用insert_unique()

map

底层红黑树,使用pair,按键值排序

multiset

和set基本相同,使用insert_equal()

multimap

和map基本相同,使用insert_equal()

《Effective Modern C++》

条款1:理解模版型别推导

数组退化成指针时,如果使用引用传递实参,则可以获得数组型别:

template<typename T>
void f(T &param);

const char name[] = "J. p. Briggs";
f(name);

T的型别推导结果是const char [13],f的形参型别被推导为const char (&)[13]。

可以创造出一个模板推导数组含有的元素个数:

template<typename T, std::size_t N>
constexpr std::size_t arraySize(T (&)[N]) noexcept {
    return N;
}

int keyVals[] = {1, 3, 7, 9, 11, 22, 35};
int mappedVals[arraySize(keyVals)];

条款2 理解auto型别推导

  • 在一般情况下,auto型别推导和模版型别推导是一模一样的,但是auto型别推导会假定用大括号括起的初始化表达式例如auto x{27}代表一个std::initializer_list,但模版类型推导却不会
  • 在函数返回值或lambda式的形参中使用auto,意思是使用模版类型推导而非auto型别推导

标签:函数,推导,型别,auto,笔记,自用,C++,template,使用
From: https://www.cnblogs.com/F-Mu/p/16968759.html

相关文章

  • HTML速查笔记
    一.html结构  <html>    <head>      head内的标签标用户是看不到的,是给浏览器看的,主要定义一些配置      放置head内常用的标签 ......
  • CSS速查笔记
    什么是CSS?控制页面样式的,通常放在HTML的head标签内使用CSS结构选择器{css样式}css样式:{属性:值,属性:值,属性:值}CSS的引入方式有3种:一般都是在html种的head标签内加css......
  • 机器学习的基础图表!学习记录笔记
    文章目录​​机器学习的基础图表!​​​​*一、机器学习概览​​​​1.什么是机器学习?​​​​2.机器学习和人工智能的关系​​​​3.机器学习的工作方式​​​​4.机器......
  • 【集成学习(下)】Task 12 Blending学习笔记
    1.导言在前几个章节中,我们学习了关于回归和分类的算法,同时也讨论了如何将这些方法集成为强大的算法的集成学习方式,分别是Bagging和Boosting。本章我们继续讨论集成学习方法......
  • C++不知算法系列之排序从玩转冒泡算法开始
    1.前言所谓排序,指把数据群体按个体数据的特征按从大到小或从小到大的顺序存放。排序在应用开发中很常见,如对商品按价格、人气、购买数量等排序,便于使用者快速找到数据。......
  • Linux 操作命令 小笔记
    1.更改文件名名字mv要更改的文件名想要更改后的名字2.cat查看文件内容3-rm删除文件......
  • My Task09 Boosting的思路与Adaboost算法 笔记
    文章目录1.导论2.Boosting方法的基本思路3.Adaboost算法Zm越小证明分类分得越对总结:数学家太强了,respect1.导论Bagging思想的实质是:通过Bootstrap的方式对全样本数据集......
  • 【集成学习(上)】My_Task06_掌握分类问题的评估及超参数调优 笔记
    文章目录​​评估模型的性能并调参:​​​​当类别为两类时,可以绘制混淆矩阵与ROC曲线​​评估模型的性能并调参:更详细的可以查看大佬的知乎:https://zhuanlan.zhihu.com/p......
  • Task5 作者信息关联 笔记
    文章目录​​任务5:作者信息关联​​​​5.1任务说明​​​​5.2数据处理步骤​​​​5.3社交网络分析​​​​5.3.1图类型​​​​5.3.2图统计指标​​​​5.4具体代......
  • CCSP学习笔记-chap5-云运营安全
    1支持数据中心设计的规划流程2设施和构建云环境中的物理基础架构3运行云环境中的物理基础架构4管理云环境中的物理基础架构5构建云环境中的逻辑基础架构6管理云......