0
点赞
收藏
分享

微信扫一扫

嵌入式八股文3

STL的allocator有什么作用?

1、内存配置有alloc::allocate()负责,内存释放由alloc::deallocate()负责;对象构造由::construct()负责,对象析构由::destroy()负责。

2、提升内存管理效率, STL采用了两级配置器,当分配的空间大小超过128B时,会使用第一级空间配置器;当分配的空间大小小于128B时,将使用第二级空间配置器。第一级空间配置器直接使用malloc()、realloc()、free()函数进行内存空间的分配和释放,而第二级空间配置器采用了内存池技术,通过空闲链表来管理内存。

STL迭代器如何删除元素?

对于序列容器vector,deque来说,使用erase(itertor)后,后边的每个元素的迭代器都会失效,但是后边

每个元素都会往前移动一个位置,但是erase会返回下一个有效的迭代器;

对于关联容器map set来说,使用了erase(iterator)后,当前元素的迭代器失效,但是其结构是红黑树,

删除当前元素的,不会影响到下一个元素的迭代器,所以在调用erase之前,记录下一个元素的迭代器即

可。

对于list来说,它使用了不连续分配的内存,并且它的erase方法也会返回下一个有效的iterator,因此上

面两种正确的方法都可以使用

STL中map与unordered_map有什么区别?

1、map底层红黑树实现,unordered_map采用hash表实现’

2、map中序遍历有序,un——map无序

vector和list的区别是什么

1、vector为数组实现,list为双向链表

2、vector支持随机访问,list不行

3、vector顺序储存,list随机

4、vector一次性分配内存,不够才二倍扩容,list一个个分配

5、vector随机访问性能好,插入删除比较慢,list反之

迭代器与指针

1、迭代器又名游标模式,提供一种顺序访问一个聚合对象中各个元素,但又不暴露该对象的内部表示。

2、迭代器是类模板,表现得象指针,重载了指针一些操作,封装了指针,指针的++只是递增地址,但是不能对list生效,迭代器可以。

3、迭代器有着更良好的用法begin,end等不用担心越界

STL里resize和reserve的区别是什么?

1、resize改变当前容器内含有元素的数量,会新增元素0,reserve只是增加空间,不新增元素。

举报

相关推荐

0 条评论