笔试题积累
1、STL中,请写出vector和list各自的优点缺点。请写出map的数据结构组织方式以及查找的时间复杂度
vector
向量相当于数组,在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储。当存储的内容超过此分配空间时再进行整理的重新分配一块内存存储。
优点:
不指定一块内存大小的数组的连续存储,既可以像数组一样操作,但可以对此数组进行动态操作。push_back()与pop_back();
随机访问方便,即[]操作和vector.at();
自动调整内存,节省空间
缺点:
实现插入与删除操作效率低 ,只能在尾部插入与删除,在头部插入与删除消耗时间规模与容器的大小成正比,当动态添加的数据超过默认的内存大小时,需要进行整体的
重新分配,拷贝与释放。
list
优点:
内存不连续,动态操作,插入和删除效率高,可在两端进行pop ,push
缺点:
不能随机访问,相对于vector占用内存多。
Map
查找时间复杂度 O(logN)
二、写一个函数将一个整数按字节反过来,如输入0x12345678,输出0x78563412,并对这个函数设计测试用例
就写了main的实现;没有抽成函数
#include<stdlib.h> #include<stdio.h> int main() { int a= 0x12345678; char* p = (char*)&a; int b=0; char* q = (char*)&b; // *q = *(p+3); // *(q+1)=*(p+2); // *(q+2)=*(p+1); // *(q+3)=*p; printf("%x\n",*(p)<<24); printf("%x\n",*(p+1)<<16); printf("%x\n",*(p+2)<<8); printf("%x\n",*(p+3)); printf("%x\n",int(*(p)<<24) + int(*(p+1)<<16) + int(*(p+2)<<8) + int(*(p+3))); getchar(); return 0; }
三、SQL语句
1)查询每个部门总工资,和每个部门的平均工资的sql语句?
select deptno, sum(sal) as SumSal,avg(sal) as AvgSal from emp group by deptno.
2)查出每个部门大于平均工资的员工姓名,所在部门名称,
只有一个表的情况
select * from staff
where sal > (select avg(sal) from staff group by deptno)