由于数据是动态的,按照一般的做法,比如遍历,当新数据的加入,处理单个操作的时间复杂度为O(n),这样往往造成TLE

通过使用合理的数据结构来存储,比如堆,能够将时间复杂度降低到 logn

阅读全文 »

enable_shared_from_this 含义
如果一个T类型的对象t,是被std::shared_ptr管理的,且类型T继承自std::enable_shared_from_this,那么T就有个shared_from_this成员函数,这个函数返回一个新的std::shared_ptr的对象,也指向对象t

如果不这么做, 会出现什么问题,看下面一段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
struct obj{
shared_ptr<obj> get_shr(){
shared_ptr<obj> ret(this);
return ret;
}
};

int main(){
shared_ptr<obj> smart_ptr(new obj);
obj& a=*smart_ptr;
shared_ptr<obj> b=a.get_shr(); //两个智能指针管理的是同一个对象,造成对象两次释放
return 0;
}

上述场景是 对象希望获得管理自己的智能指针,但是直接通过成员函数返回一个shared_ptr,造成了被管理对象的重复删除。