------------恢复内容开始------------
P2
1.container 需要有allocator帮助分配内存,即每种container都得搭配一个allocator
2. container.begin() 表示容器第一个元素的起始地址(指向第一个元素)
container.end() 表示最后一个元素之后下一个元素的起始位置【*(container.end()) = 垃圾内存】
综上iterator 本身类似一个指了针(可能本质就是指针实现的) 可以(*,->,++,--)
iterator本身是一个smart pointer【pointer like class】
P3
1. Vector 只有一端可扩充,pushback()静态数组实现,每次是两倍扩展(2,4,8,16.....)
3. Associative containers: set(key)/multiset. (key:value)map/multimap 底部都是红黑树实现
4. multi-表示key值是否可重复
unordered container(hashtable实现) 一般是链式冲突解决法
P5 <List> C++ 的list是双向链表且是环状的实现。单向链表是forward—list
1. 全局sort VS 容器自带sort
2. 提供 push_back & push_front
<forward-list>:
3. only push_front //Prepends the given element value to the beginning of the container.
4. slist(GNU 独有) ===== forward-list
<deque双端队列> 分段连续,段间离散,段内连续(有次序)
deque-->可以重构成 stack & queue【更像是deque的adapter】
因为deque有 push_front[back] 以及 pop_front[back]顾可以提供stack与queue 的所有操作。
P 10 Allocator
::operator new , ::Operator delete最终都是C的malloc和free来分配内存
GNU2.9 alloc类:存在一个数组[0]->[15] [0]每个元素8个字节,[1]每个元素占16...8的倍数递增下去,导致每次为多个元素分配空间时,头部的cookie个数减少。
GNU4.9 allocator类
P 11 容器之间的关系
array,vector--->都是连续的空间(静态数组实现)。 priority_queue 中composite 一个heap 而heap则composite 一个 vector(基础都是vector)
set,map,multiset,multimap -> 中含有rb_tree 为复合关系 。 hash_set, hash_map ==unordered_set , unordered_map
deque(分段连续空间) stack,queue中都含有一个双端队列.
一般容器的iterator都需要 重载++ -- * -> 这4个操作符重载

postfix form = i++(后置)fetch and increment ---->重载 operator++(int) return { self temp = *this; ++*this ; return temp; } //old value {return by value} ->不提供 i++++
prefix form = ++i (前置)增加然后取回值 ------>重载 operator++() return { return (*this)++ ; }. //{return by reference} -> 提供 ++++i
P13 list(本质是一个前闭后开双向链表,之所以要成环状,是为了begin()和end()判断空和满逻辑要不同)
begin指向当前表头,end指向尾部元素的下一个
iterator萃取器【iterator_traits】:用于返回该容器的一系列属性:iterator_category(指针的移动性质指针向前与向后),difference_type(当需要知道两iterator之间的距离时该用哪种数据类型表示 一般unsigned int),value_type(容器的元素类型),reference,pointer。
所以iterator就需要5种associated types! 但前提只有struct(iterator) 和 class这种能够提供typedef的才可以通过classname直接萃取回答。
如果对象是一个native pointer的话则无法直接通过类名访问,而是通过增加中间层(即iterator-萃取机)(提供偏特化在遇到pointer时可识别)

函数指针 (与数组类似函数的名字就是指向该函数的指针)
data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn);
例如:
1.int (*fp)(int a); // 这里就定义了一个指向函数(这个函数参数仅仅为一个 int 类型,函数返回值是 int 类型)的指针 fp。
2.int RecallFunc(int *start, int *end, bool (*pf)(int)) // 定义指向函数(返回值 为bool型,参数只有一个为int)的指针pf.
------------恢复内容结束------------
P 14 vector(size = 12bytes 三根指针)【前闭后开】

front vs begin //一个返回数值(reference)一个返回指针(iterator)
back vs end //一个返回数值(reference)一个返回指针(iterator)
vector's iterator 本质就是一个指针
红黑树(RB-Tree)
1 //rb_tree 红黑树 是set 和 map的底层实现 使得元素自动有序。可以用iterator来改变元素的data,但是不应该这样做。
2 //insert_unique()//不允许插入相同,插入无效,但不报错 insert_equal()
3 //key关键字 //@argus vale = (key|data) //KeyOfValue =如何从value决定key是多少。类似hashfunction
4 template <class Key , class Value ,class KeyOfValue ,class Compare, class Alloc = alloc>
5 class rb_tree{
6 protected:
7 typedef _rb_tree_node<Value> rb_tree_node;
8 public:
9 typedef rb_tree_node* link_type;
10 protected:
11 //RB_tree 只含有三个data
12 size_t node_count; //unsigned integer
13 link_type header; //指向整棵树的pointer
14 Compare key_compare; //一个彷函数 function object key值之间比较的规则
15 }
23. hashtable
Buckets vector 当需要插入的元素个数大于bucket的个数时,需要re-hash。bucket 数量往往是素数。GNU选的是53作为初始,且在rehash的时候✖️2找最近的质数。
----strcmp(char* s1, char* s2)
//lexicographical order 字典顺序 [大写字母before与小写字母
Negative value if lhs appears before rhs in lexicographical order. //
Zero if lhs and rhs compare equal.
Positive value if lhs appears after rhs in lexicographical order.
In normal English usage, when we sort words alphabetically, we employ two rules:
If two words have the same first letter, we compare the second. If the second letters are the same, we compare the third, etc. Finally, one word comes before the other if the first differing letter comes before the corresponding letter.
If two words are identical up to the length of the shorter word, the shorter word comes first.
So "Tom" comes before "Tooth". The first letters are identical ("T"), the second letters are identical "o", but the third letters diff and "m" comes before "o". Therefore "Tom" comes before "Tooth".
"Tom" comes before "Tomas" because the two words are identical through the first three letters "Tom" and "Tom" is shorter than "Tomas".
Lexicographic order is simply alphabetic ordering, generalized for non-letter values. Consider a sequence of values, not necessarily letters:
(1,5,10) comes before (1,6,3) because "5" comes before "6".
(1,5,10) comes before (1,5,10,15,20) because (1,5,10) is shorter than (1,5,10,15,20).
Lexicographic ordering is particularly useful if the elements of the sequence have some specific meaning, with the earlier values giving a higher precedence. For example, consider these times: 9:13 AM and 8:25 AM. If we represent these with the sequence (9,13) and (8,25), then (8,25) comes before (9,13) because 8 comes before 9. What if the hours are the same? For example, (9,13) comes before (9,45) because 13 comes before 45. As you can see, lexicographic ordering allows the hour field to have a higher precedence than the minute field.
--->hash function
template <class Key> struct
C++ 11 unordered_set ---> set
容器-->class template
Algorithm --> function template: algorithm看不见containers,算法所需的一切信息需要由iterators来提供,告知具体数据结构。 iterator由容器提供~
output_iterator(例 ostream_iterator)是write-only,无法像forward iterator那样 read (*forward_iterator!= *first)
--->rbegin() & rend()

rbegin() 与 end()的指向一致但行为方向相反
rend() 与 begin()指向一致但行为方向相反
---->functor (与adaptor适配). functor
模版函数两种调用方法1. 显式指明参数类型 func<int,char>(5,'s');
2. 隐式推倒 func(4,'s');
---->C11 新适配器 bind & placeholders. (_1, _2 , _3....)
std::bind 1.functions
2.function objects
3.member functions, _1
-----> 函数指针
声明: 返回类型 (*指针名) (函数形参1,函数形参2....)
//声明一种函数指针类型 ,typedef 定义出一个新的类型名
typedef int (* Calc)(int value1 , int value2); // Calc 为指向该类函数 变量类型
typename 解决问题的最终办法,就是显式地告诉编译器,T::bar是一个类型名(而不是一个变量名)。这就必须用typename关键字,
--------> 勿在浮沙筑高楼
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
如何学习ruby的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/
深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG
文章目录1、自相关函数ACF2、偏自相关函数PACF3、ARIMA(p,d,q)的阶数判断4、代码实现1、引入所需依赖2、数据读取与处理3、一阶差分与绘图4、ACF5、PACF1、自相关函数ACF自相关函数反映了同一序列在不同时序的取值之间的相关性。公式:ACF(k)=ρk=Cov(yt,yt−k)Var(yt)ACF(k)=\rho_{k}=\frac{Cov(y_{t},y_{t-k})}{Var(y_{t})}ACF(k)=ρk=Var(yt)Cov(yt,yt−k)其中分子用于求协方差矩阵,分母用于计算样本方差。求出的ACF值为[-1,1]。但对于一个平稳的AR模型,求出其滞
写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。有没有学习Ajax(jQuery)和Rails3的好资源?