C++ priority_queue自定义排序
C++ priority_queue自定义排序总结
方法一:函数指针
以下几种都可以,具体可参考《C++ Primer》
1 | typedef int elem; |
对于cmp和&cmp你应该这样理解,cmp是函数的首地址,它的类型是bool(elem, elem),&cmp表示一个指向函数cmp这个对象的地址,它的类型是bool(*)(elem, elem),因此test和&test所代表的地址的值是一样的,但类型不一样!
C++ priority_queue自定义排序总结
以下几种都可以,具体可参考《C++ Primer》
1 | typedef int elem; |
对于cmp和&cmp你应该这样理解,cmp是函数的首地址,它的类型是bool(elem, elem),&cmp表示一个指向函数cmp这个对象的地址,它的类型是bool(*)(elem, elem),因此test和&test所代表的地址的值是一样的,但类型不一样!
s的类型是二维数组,但是其本身也是一个一维指针(数组指针),其静态类型是char(*)[10],每次移动是10个char长度也就是10字节。其解引用后静态类型是char*,每次移动是1个char长度也就是1字节。
值得注意的是,类似函数指针,s、*s、&s其值都是一样的,都是该二维数组首个元素的地址,因此不能将数组名当成是一个值为元素首地址的常规变量!因为永远无法取得其地址。
因此,下面代码中将s赋值给双重指针ps是完全错误的;双重指针要经过两次间接跳转访问元素:比如ps的值为0x0000ff33,*ps首先跳转到该位置后取其值,比如说那个地址的值为0x0000eedd,将*ps当成字符串输出时,会再次跳转到地址为0x0000eedd的位置取出char,完全乱了。
而作为对比,数组指针解引用不会跳转,只会修改其步幅跨度
经典读者写者问题
1 | int readcount=0; |
两种bitcpy的实现方式
1 | #define HALF_WORD uint16_t |
拷贝方式是从单个字节的低位开始拷贝,进位式拷贝。