day4(map、迭代器、set、TCP、TCP头部)
- map,其内部的数据都是有序的,默认排序是按照key的大小进行的排序。使用例子:Map<int, string> mapStudent; 一一对应的key-value。key可以任意类型,但是必须支持<操作符。根据key可以快速查找,复杂度为logN。
map的头文件, #include - map<int, string> : : iterator iter ;//声明迭代器
for(iter = mapStudent.begin() ; iter ! = mapStudent.end () ; iter++)
{cout<< iter->first<< ””<< iter->second<<endl;} - map的插入数据,mapStudent . insert(pair<int , string>(l,”student_ one ”) ) ,
map插入的数据有三种类型:pair、value_type、数组型。插入时需要保持格式一致,如果里面的数据时pair型,插入value_type型时要转化:
mapStudent.insert(map<int , string> : : value_type (1 ,” student_one ” )) ;
map的insert插入都是在后面插入。
数组形式的插入:mapStudent[l] = ” student_ one ”;就像数组一样操作。且从 1 开始
用insert时 已有的关键字 不能再次插入,但是数组形式可以直接覆盖的。 - 迭代器,vector::iterator it;//it就是迭代器,能都读写里面的元素。
::const_iterator it; 这个it只能读元素,不能写元素。
新标准提供两个:容器 v, v.cbegin() v.cend() 都是返回const_iterator类型。也是返回第一个元素和最后元素下一个位置的迭代器。
vector改变容量时 会使迭代器失效。
反向迭代器 使用 rbegin rend, 过程还是 ++ 但是是从后往前的效果。
.size确定大小,数组遍历 从下表1开始。 - map的查找,find查找,map<int, string>: :iterator iter=mapStudent.find(l);
输出形式: iter->second<< endl; 如果是->first 则输出他的key; - map的删除,也是erase(),可以直接删除元素、对应key的元素、迭代器所指向的元素、迭代器一段区间的元素。
- 函数对象,调用操作符的类,其对象常称作函数对象,他们是行为类似函数的对象。
- map里的默认排序,map<string, int, greater >mapStudent; greater表示从大到小排序,换成less则是从小到大,默认是less 。
这是 greater的原型,要是想按自己的想法排序,则改写结构体。对应map里的第三个参数也要改变。
map是集合容器,不是线性的。所以不能直接用sort排序。
map不允许有重复元素,而multimap可以有重复元素。 - map,内部自建一个红黑树。二叉查找树就是中序遍历且从小到大。
- multimap 允许有重复的key值
插入元素 .insert(pair<int,int>(key,value));
.insert(make_pair(key,value));
multimap没有下标操作。 - set 也是一种关联式容器,set中数元素不能被直接改变。set的内部结构也是红黑树。
插入和删除都是指针的变换,所以效率非常高。
set每个元素的值都是唯一的,也会自动排序。 - set查找,是二分查找。主要是log2()的关系。例如10000个数据,213<10000<214,所以最多搜索14次。
- set,插入也是insert,删除erase,查找find,iterator find(value )返回value 所在位置, 找不到value 将返回end()
count(value )返回set 对象内元素值为value 的元素个数。 - 网络TCP协议,七层和五层的学术上网络模型,四层模型是最常用的,TCP/IP分层模型。
四层:网络接口、网间层(IP在网间层)、传输层(TCP、UDP在传输层)、应用层(DNS,方法在应用层)。
网络接口,定义了APP这样的协议,提供了TCP/IP协议的数据结构和实际物理硬件之间的接口。
网间层,对应OSI七层模型的网络层,包含IP、RIP协议,负责数据的包装、寻址、路由。
传输层,提供两种端到端的通信服务,TCP提供可靠的数据流运输服务,UDP提供不可靠的的用户数据报服务,
应用层,对应ISO的应用层和表示层,包含很多种协议。
所有层的数据首先会打包到TCP的Segment(数据段),然后打包到IP的Packet(数据包),再打包到以太Etherent的Frame(帧)种,传到端以后,各层解析自己的协议,然后把数据交给更高层额协议来处理。
15. TCP头部,
16位端口号,告知主机该报文来自哪里(源端口),要传给那个上层协议或应用程序(目的端口)。进行TCP通信时,客户端一般使用系统自动选择的临时端口。服务器则使用知名的服务端口,端口号定义在/etc/service文件中。
32位序号,。。。。。。