*** 作系统导论:1.multimap允许关键字重复。
所以multimap的成员insert()只返回一个指向插入元素的迭代器而不再返回bool值。
2.关联容器的成员:
erase()
接受参数(3种):1.一个迭代器p;2.一对迭代器b,e;3.一个键key_type。
作用:1删除关联容器内的一个元素;2删除关联容器内的一个范围内的元素;3删除关联容器内的拥有某种键的全部元素。
返回值:1返回p之后的元素的迭代器,若p本身指向的是尾元素,就返回c.end();2返回e;3返回删掉的元素数量,
类型是size_type,可知map只可能返回0或1,而multi可能返回更大的值。
3.同为容器的成员,作为关联容器的成员时的erase()在参数是一个迭代器或者两个迭代器时会返回迭代器,
而不像作为顺序容器的成员时的erase()竟然返回void。
4.一个容器可以进行下标 *** 作是因为这个容器提供了下标运算符和at函数。
虽然这看似是一句废话,但说明了其内部的一些细节。
5.有些关联容器可以进行下标 *** 作如map和unordered_map,也有的不行比如set。
两种multimap也都不行因为一个键要对应多个值。
6.关联容器下标 *** 作与正常情况有两点不同:1[ ]里的内容是关键字;2如果该关键字不存在于容器中,使用它时,
会创建这样一个键值对并进行值初始化,然后添加到容器中。
7.map里的每一个元素实际上是指value_type,它可以通过解引用指向map的元素的迭代器得到。
而对map进行下标 *** 作实际上是在求mapped_type这种map独有的类型别名,它只是键对应的值。
所以说map是很特殊的一类容器,因为对其元素的迭代器的解引用和对其进行下标运算得到的竟然不是同一种类型。
8.左值的特殊之处在于既可以读又可以写,就是比右值多了可以向它写入的功能。
注意它可以当做右值来用。
1.开机时, *** 作系统会在内核模式下使用某种特殊指令,告诉硬件在发生哪些事情时该去执行哪些程序(代码),
并附带这些程序(代码)的位置。
例如在程序进行系统调用时,硬件应该去执行哪些程序(代码)(系统调用处理程序)(这个对应关系就是陷阱表)。
而硬件一旦收到这种来自 *** 作系统的通知,就会记住这些程序的位置直到关机。
2.每个程序在开始执行的时候其实都处在“陷阱里”,都要“从陷阱返回”才能开始运行main函数里的程序。
3.程序调用系统调用的时候都要"陷入" *** 作系统。
4.从进程将寄存器等保存在内核栈,到进程从内核栈取出寄存器等以恢复进程的这段时间里,
进程把对计算机硬件的控制权交给了 *** 作系统。
这就是所谓的受限,即它不能一直占用着计算机资源。
这就是受限直接运行协议(LDE协议)。
5.程序结束从main返回后,其实要执行系统调用exit()。
这还是要陷入 *** 作系统,然后将程序内存释放并将其从进程列表中清除,
这样就正确地退出了程序。
6.一个关键问题:如果一个进程在CPU上运行,排除掉它自己进行系统调用的情况,
那么如何让 *** 作系统重获对CPU(硬件)的控制权,以达到切换进程的目的呢?
7.答案是通过一种协作方式——等待系统调用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)