日常随记

手撕代码
很多玩家的击杀信息,每一条信息为击杀一次,字符串表示,用空格隔开。求击杀数top K的玩家ID。(半小时,要求复杂度N logK)

代码题,如果玩家数量多使用什么方式排序

代码题,如何优化,不产生临时string

C++中,为什么可以函数重载,实现原理
编译器在编译.cpp文件中当前使用的作用域里的同名函数时,根据函数形参的类型和顺序会对函数进行重命名(不同的编译器在编译时对函数的重命名标准不一样)但是总的来说,他们都把文件中的同一个函数名进行了重命名;
在vs编译器中:
根据返回值类型(不起决定性作用)+形参类型和顺序(起决定性作用)的规则重命名并记录在map文件中。

接上一题,重载函数重命名的依据
在同一作用域类,一组函数的函数名相同,参数列表不同(参数个数不同/参数类型不同),返回值可同可不同。

虚指针怎么在函数表中查询
动态绑定有以下三项条件要符合:
使用指针进行调用
指针属于up-cast后的
调用的是虚函数

const接在函数末尾有什么作用
将一个成员函数声明为const,表明这个成员函数不会修改对象的数据成员,能zhi保证对象的常量dao性。
声明const成员函数的语法形式是:
返回类型 成员函数名称(参数表) const{}
例如:int fun(int a) const{return a;}

const修饰函数时,想改变成员变量的两种方法
要把成员变量设置成mutable类型。如
class C

{

public:

void func(const int& p) const

{

i = p;

}

private:

mutable int i;

};
const修饰的函数可以重载么
const修饰的函数不仅能限制函数去修改成员变量,同时也能实现函数的重载。要想调用const修饰的重载函数,需要用const对象去调用。

dynamic_cast原理,让你设计怎么做

static_cast返回失败时怎么办

UE4中的cast

STL中vector原理

vector的迭代器何时失效
在向容器添加元素后,如果储存空间未重新分配,指向插入位置之前的元素的迭代器、指针、引用有效,但指向插入位置之后的将会失效。
在从容器删除元素之后,指向被删元素之前元素的迭代器、引用、指针仍有效。尾后迭代器也就失效。

哈希表原理
哈希表的底层实际上是基于数组来存储的,当插入键值对时,并不是直接插入该数组中,而是通过对键进行Hash运算得到Hash值,然后和数组容量取模,得到在数组中的位置后再插入。取值时,先对指定的键求Hash值,再和容量取模得到底层数组中对应的位置,如果指定的键值与存贮的键相匹配,则返回该键值对,如果不匹配,则表示哈希表中没有对应的键值对。

哈希冲突
经过哈希函数处理后仍然有不同的数据对应相同的值。这时候就产生了哈希冲突。
解决方法:开放地址方法,链式地址法

拉链太长如何
拉链长度超过阈值变成红黑树

STL中如何解决哈希冲突的:链式

空间检测,BSP

posted @ 2020-08-12 16:42  星之所在kim  阅读(318)  评论(0)    收藏  举报