文章来源:http://www.mianshibaike.com/a/C_C__/C__/20130710/301_2.html,转载请注明。 1、vector和list的区别 区别:1)vector的对象实在一块连续的内存空间上,而list的对象可以不在来连续的内存空间上。 2)vector元素的随机访问的效率很高,插入和删除效率较低,当vector存储的对象的构造较为复杂时,移动vector的元素需要调用对象的拷贝构造函数,效率因而很低。vector是离散存储的,访问元素时需要从头或者尾部开始时进行遍历(不能随机访问),删除和插入元素相比vector的效率高,不需要移动元素。vector的大小扩张通常是2倍的扩展。 3)vector是单向的,list是双向的。 4)vector适用:对象数量变化少,简单对象,随机访问元素频繁;list适用:对象数量变化大,对象复杂,插入和删除频繁。 2、C++中const的一些常用方法 1)定义一个只读的变量。(而非一个常量) 2)修饰函数的参数。当我们希望函数的实参不被改变时,用const修饰函数的形参,防止实参发生改变,特别是指针参数,防 止指针本身发生改变。 3)修饰类的成员函数,可以防止类的数据成员和this指针发生改变。 4 )修饰一个类的对象。 例如:const CMyClass mc,这时的mc对类成员变量和成员函数的调用是有限制的: a、能读取类的成员变量而不能去修改它; b、只能调用末端有const修饰的函数。 3、输出数组的K个最大值 使用STL中的partial_sort. partial_sort使用的是堆排序,建堆的时间复杂度为O(n),调整堆的时间度杂度为o(logn),如果调用partial_sort时middle的值为last的值,则相当于调用sort,对所有元素排序,但是堆排序是稳定的排序。假如求的是m个元素的partial_sort,则,o(n) + m*o(logn); 相比使用sort()函数使用的快速排序,其时间复杂度为n(logn)。 4、对链表进行排序 struct Node { int key; Node *next }; 5、 给出只允许进程单例运行的代码 在linux/unix环境下通过文件所实现,见APUE-单实例守护进程。 为了正常运作,某些守护进程时实现为单实例的,也就是在忍一时刻只运行该守护进程的一个副本。例如,该守护进程可能需要互斥的访问一个设备。在cron守护进城的情况下,如果同时有多个实力运行,那么每个飞奔都可能试图开始某个预定的操作,于是造成了该操作系统的重复执行,很可能导致出错。
|