Java专项练习三

1.以下哪项不属于STL container?( )

A.stack
B.queue
C.multimap
D.string

正确答案: D 你的答案: C (错误)

解析:
STL container分为两大类:
序列容器:动态数组vector,双端队列 deque,链表list
关联容器:set,map,multiset,multimap,bitset
容器适配器:stack,queue,priority_queue
string 是顺序容器类型;
stack 是适配器;

2.下面代码打印结果为()
union package
{
char head;
int body;
};
struct message
{
char id;
int crc;
union package pack;
};

		int main()
		{
		printf("size=%d\n",sizeof(struct message));
		return 0;
		}




	A.9
	B.10
	C.11
	D.12

正确答案: D 你的答案: B (错误)

解析:izeof(union),以结构里面size最大元素为union的size,因为在某一时刻,union只有一个成员真正存储于该地址。内存对齐

3.当很频繁地对序列中部进行插入和删除操作时,应该选择使用的容器是()

A.vector
B.list
C.deque
D.stack

正确答案: B 你的答案: A (错误)

ABC 是顺序性容器:
vector: 是一段连续的内存块
list:是所有的数据元素分开保存,可以是任何两个元素没有连续
deque:是多个连续的内存块
三者区别:
vector:查询性能好,并且在末端增加数据也很好,除非它重新申请内存, 适合高效地随机存储
list:是一个链表,任何一个元素可以是不连续的,但它都有两个指向上一元素和下一元素的指针,所以它对插入、删除元素性能是最好的,而 查询性能非常差; 适合大量地插入和删除操作而不关心随即存储 的要求
deque: 介于两者之间,兼顾了数组和链表的优点,它是分块的链表和多个数组的结合,所有它有比list好的查询性能,比vector好的插入、删除性能。
如果你需要随机存取又关心两端数据的插入和删除,那么deque是最佳之选。
D(stack)是容器适配器:
是一个容器类的改编,为程序员提供了堆栈的全部功能,也就是说实现了一个先进先出(FILO)
的数据结构。

C++ STL 的实现:
vector 底层数据结构为数组 ,支持快速随机访问

list 底层数据结构为双向链表,支持快速增删

deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问

stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

queue 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

45是适配器,而不叫容器,因为是对容器的再封装

priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现

set 底层数据结构为红黑树,有序,不重复

multiset 底层数据结构为红黑树,有序,可重复

.map 底层数据结构为红黑树,有序,不重复

multimap 底层数据结构为红黑树,有序,可重复

hash_set 底层数据结构为hash表,无序,不重复

hash_multiset 底层数据结构为hash表,无序,可重复

hash_map 底层数据结构为hash表,无序,不重复

hash_multimap 底层数据结构为hash表,无序,可重复

4.下面哪个标识符是合法的?

A."9HelloWorld"
B."_Hello World"
C."Hello*World"
D."Hello$World"

正确答案: D 你的答案: B (错误)

解析:1、一看就知道是D。
2、java的变量名有三种元素构成:数字+字符+$+下划线。
3、java对这三种元素的顺序也是有要求的:不能以数字开头+不能是关键字.
4、A中错在以数字开头、B中错在有空格、C中错在有*.

5.下列程序的输出是:( )

#define add(a,b) a+b
int main()
{
    printf(“ % d\n”, 5 * add(3, 4));
    return 0;
}


A.23
B.35
C.16
D.19

正确答案: D 你的答案: B (错误)
解析:这时候应该给 #define add(a+b) a+b 的a+b 带上括号 变成 #define add(a+b) (a+b)
这是一个习惯问题,宏定义的若是一个算术表达式或者其他运算表达式 务必加上括号
选D 5*3+4=19

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值