SLAM数据结构面试题

目录

      • 1.你熟悉的STL有哪些?
      • 2.各排序算法的时间复杂度
      • 3.Eigen是行优先还是列优先?
      • 4.c++ 虚函数与纯虚函数的区别
      • 5.map 与 unordered map 区别

1.你熟悉的STL有哪些?

STL:

  • vector: 底层实现是一个顺序表结构,可以动态增长长度的数组
  • deque: 双端队列,deque的底层实现是一个链表数组,序列式容器
  • list: 底层实现是一个双向链表,序列式容器
  • map: 底层通常是由一颗红黑树组成,第一个可以称为键(key),第二个可以称为该键的值(value),在map内部所有的key都是有序的,并且不会有重复的值
  • set: 集合内的元素是不重复的 ,类似map中的key元素,但是没有对应的value

2.各排序算法的时间复杂度

  • 冒泡排序:最好的情况是数据本来就有序,复杂度为O( n n n);最差的情况是O( n 2 n^2 n2),稳定算法。

  • 选择排序:最好的情况是数据本来就有序,复杂度为O( n n n);最差的情况是O( n 2 n^2 n2),不稳定算法

  • 直接插入排序:最好的情况是数据本来就有序,复杂度为O( n n n);最差的情况是O( n 2 n^2 n2),稳定算法

  • 希尔排序:最好的情况复杂度为O( n n n);最差的情况是O( n 2 n^2 n2),但平均复杂度要比直接插入小,不稳定算法

  • 快速排序:最好的情况复杂度为 n l o g n nlogn nlogn,最差的情况是O( n 2 n^2 n2),快速排序将不幸退化为冒泡排序;不稳定(比如序列5 3 3 4 3 8 9 10 11,现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱)

3.Eigen是行优先还是列优先?

在Eigen中矩阵的存储默认是列优先的

4.c++ 虚函数与纯虚函数的区别

C++ 虚函数和纯虚函数的区别:

  • 定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
  • 定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

5.map 与 unordered map 区别

map unordered map
排序方式 不排序 在缺省下,按照递增的排序顺序
底层 内部采用了自平衡的BST(二叉搜索树)的数据结构,实现了数据排序 采用了哈希表的数据结构
搜索时间 复杂度为log(n) O(1)为平均时间,最坏情况下的时间复杂度为O(n)
插入操作的时间复杂度 复杂度为log(n)+再平衡时间 与搜索的时间复杂度一样
删除操作的时间复杂度 复杂度为log(n)+再平衡时间 与搜索的时间复杂度一样
  • 如果你想要一个具有排序后的数据的话,通常可以选择Map这种类型。
  • 如果你只想记录数据而不是想要将数据进行排序的话,那么就可以选择unordered_map这种数据结构。

你可能感兴趣的:(slam)