:
shared_ptr>容器中
C、对于复杂类型T的对象tObj,++tObj和tObj++的执行效率相比,前者更高
D、采用new操作符创建对象时,如果没有足够内存空间而导致创建失败,则new操作符会返回NULL
A中auto是给别人东西而自己没有了。
所以不符合vector的要求。
而B可以。
C不解释。
new在失败后抛出标准异常std:
:
bad_alloc而不是返回NULL。
9、有如下几个类和函数定义,选项中描述正确的是:
【多选】(B)
[cpp] viewplaincopy
1.class A
2.{
3.public:
4. virtual void foo() { }
5.};
6.
7.class B
8.{
9.public:
10. virtual void foo() { }
11.};
12.
13.class C :
public A , public B
14.{
15.public:
16. virtual void foo() { }
17.};
18.
19.void bar1(A *pa)
20.{
21. B *pc = dynamic_cast(pa);
22.}
23.
24.void bar2(A *pa)
25.{
26. B *pc = static_cast(pa);
27.}
28.
29.void bar3()
30.{
31. C c;
32. A *pa = &c;
33. B *pb = static_cast(static_cast(pa));
34.}
A、bar1无法通过编译
B、bar2无法通过编译
C、bar3无法通过编译
D、bar1可以正常运行,但是采用了错误的cast方法
选B。
dynamic_cast是在运行时遍历继承树,所以,在编译时不会报错。
但是因为A和B没啥关系,所以运行时报错(所以A和D都是错误的)。
static_cast:
编译器隐式执行的任何类型转换都可由它显示完成。
其中对于:
(1)基本类型。
如可以将int转换为double(编译器会执行隐式转换),但是不能将int*用它转换到double*(没有此隐式转换)。
(2)对于用户自定义类型,如果两个类无关,则会出错(所以B正确),如果存在继承关系,则可以在基类和派生类之间进行任何转型,在编译期间不会出错。
所以bar3可以通过编译(C选项是错误的)。
10、在IntelCPU上,以下多线程对int型变量x的操作,哪几个不是原子操作,假定变量的地址都是对齐的。
【多选】(ABC)
A、x=y B、x++ C、++x D、x=1
看下在VC++6.0下的汇编命令即可:
从图可以看出本题只有D选项才是原子操作。
11、一般情况下,下面哪些操作会执行失败?
【多选】(BCD)
[cpp] viewplaincopy
1.class A
2.{
3.public:
4. string a;
5. void f1()
6. {
7. printf("Hello World");
8. }
9. void f2()
10. {
11. a = "Hello World";
12. printf("%s",a.c_str());
13. }
14. virtual void f3()
15. {
16. printf("Hello World");
17. }
18. virtual void f4()
19. {
20. a = "Hello World";
21. printf("%s",a.c_str());
22. }
23.};
A、A*aptr=NULL; aptr->f1();
B、A*aptr=NULL; aptr->f2();
C、A*aptr=NULL; aptr->f3();
D、A*aptr=NULL; aptr->f4();
至于A为什么正确,因为A没有使用任何成员变量,而成员函数是不属于对象的,所以A正确。
其实,A*aptr=NULL;aptr->f5();也是正确的,因为静态成员也是不属于任何对象的。
至于BCD,在B中使用了成员变量,而成员变量只能存在于对象,C有虚表指针,所以也只存在于对象中。
D就更是一样了。
但是,如果在ClassA中没有写public,那么就全都是private,以至于所有的选项都将会失败。
12、C++下,下面哪些template实例化使用,会引起编译错误?
【多选】(CEF)
[cpp] viewplaincopy
1.template class stack;
2.void fi(stack); //A
3.class Ex
4.{
5. stack &rs; //B
6. stack si; //C
7.};
8.
9.int main(void)
10.{
11. stack *sc; //D
12. fi(*sc); //E
13. int i = sizeof(stack); //F
14.
15. return 0;
16.}
选CEF; 请注意stack和fi都只是声明不是定义。
我还以为在此处申明后,会在其他地方定义呢,坑爹啊。
由于stack只是声明,所以C是错误的,stack不能定义对象。
E也是一样,stack只是申明,所以不能执行拷贝构造函数,至于F,由于stack只是声明,不知道stack的大小,所以错误。
如果stack定义了,将全是正确的。
13、以下哪个说法正确()
[cpp] viewplaincopy
1.int func()
2.{
3. char b[2]={0};
4. strcpy(b,"aaa");
5.}
A、Debug版崩溃,Release版正常
B、Debug版正常,Release版崩溃
C、Debug版崩溃,Release版崩溃
D、Debug版正常,Release版正常
选A。
因为在Debug中有ASSERT断言保护,所以要崩溃,而在Release中就会删掉ASSERT,所以会出现正常运行。
但是不推荐如此做,因为这样会覆盖不属于自己的内存,这是搭上了程序崩溃的列车。
数据结构类
37、每份考卷都有一个8位二进制序列号,当且仅当一个序列号含有偶数个1时,它才是有效的。
例如:
0000000001010011都是有效的序列号,而11111110不是,那么有效的序列号共有(128)个。
38、对初始状态为递增序列的数组按递增顺序排序,最省时间的是插入排序算法,最费时间的算法(B)
A、堆排序 B、快速排序 C、插入排序 D、归并排序
39、下图为一个二叉树,请选出以下不是遍历二叉树产生的顺序序列的选项【多选】(BD)
A、ABCDEFIGJH
B、BDCAIJGHFE
C、BDCAIFJGHE
D、DCBJHGIFEA
40、在有序双向链表中定位删除一个元素的平均时间复杂度为()
A、O
(1) B、O(N) C、O(logN) D、O(N*logN)
41、将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为()
A、100 B、40 C、55 D、80
42、将数组a[]作为循环队列SQ的存储空间,f为队头指示,r为队尾指示,则执行出队操作的语句为(B)
A、f=f+1 B、f=(f+1)%m C、r=(r+1)%m D、f=(f+1)%(m+1)
43、以下哪种操作最适合先进行排序处理?
A、找最大、最小值 B、计算算出平均值 C、找中间值 D、找出现次数最多的值
44、设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元元素占一个空间,问A[3][3]存放在什么位置?
(C)脚注(10)表示用10进制表示
A、688 B、678 C、692 D、696
45、使用下列二维图形变换矩阵A=T*a,将产生的变换结果为(D)
A、图形放大2倍
B、图形放大2倍,同时沿X、Y坐标轴方向各移动一个单位
C、沿X坐标轴方向各移动2个单位
D、沿X坐标轴放大2倍,同时沿X、Y坐标轴方向各移动一个单位
46、体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。
每个同学按顺序来到操场时,都从排尾走向排头,找到第一个比自己高的同学,并站到他的后面,这种站队的方法类似于()算法。
A、快速排序 B、插入排序 C、冒泡排序 D、归并排序
47、处理a.html文件时,以下哪行伪代码可能导致内存越界或者抛出异常(B)
inttotalBlank=0;
intblankNum=0;
inttaglen=page.taglst.size();
A for(inti=1;i {
//checkblank
B while(page.taglst[i]=="
"&&i {
C ++totalBlank;
D ++i;
}
E if(totalBlank>10)
F blankNum+=totalBlank;
G totalBlank=0;
}
注意:
以下代码中taglen是html文件中存在元素的个数,a.html中taglen的值是15,page.taglst[i]取的是a.html中的元素,例如page.taglst[1]的值是
a.html的文件如下:
test
aaaaaaa