注册 登录
编程论坛 C语言论坛

问两个C和C++的简单问题,请大神解答一下

S140131022 发布于 2018-03-20 18:51, 1355 次点击
1、因为STL中,队列queue和优点队列priority_queue都是适配容器,但为何队列queue不能用vector实现,可以用list实现,而优先
级队列priority_queue却可以用vector实现,却不可以用list实现呢?

2、
    unsigned long val = 0;
    char a = 0x48;
    char b - 0x52;
    val = b << 8 | a;
结果是21064,我想问一下,b<<8为何移位后不是0?是不是char型表达式发生运算时都会自动转换为int呢?两个三char型进行运算呢?
例如char c = a + b;

    谢谢大佬!
4 回复
#2
lanke7112018-03-20 21:08
1.不是说不能实现,是容器自身操作受到限制。vector不支持删除第一个元素。当然,你可以自己另外写一个实现。严格来讲,list实现队列性能比较好,另外,list源生支持删除头节点操作。
优先级队列,其实就是个排序,容器默认是vector,因为它支持下标,很容易实现排序,list不支持下标。



#3
lanke7112018-03-20 21:31
2.b<<8后为0。结果为21064,是因为表达式结果隐式转换为unsigned long类型。请参考ASCII码表,以及二进制加相补码反码的计算。
#4
S1401310222018-03-21 23:35
回复 3楼 lanke711
请问大佬,char型变量的任何运算都会隐式转换为unsigned long型再去做吗?
#5
lanke7112018-03-22 10:25
比如char a="b" ;   
cha字符--------对应Ascii编码的二进制数--------转换成十进制数的int 类型值
在默认情况下声明的整型变量都是有符号的类型
1