1.STL中emplace 和push的区别
答: C++11新加入的语法,emplace_back() 和 push_back() 在底层实现机制上是不同的, push_back() 在向容器尾部添加元素时,会先创建这个元素,然后再将这个元素拷贝或移动到容器中(若是拷贝的话,还需要在结束后销毁之前创建的这个元素), emplace_back() 则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。
2.共享内存为什么效率高?
答:1)无需复制数据:在进程或线程之间共享数据时,传统的方式是通过进程间通信(IPC)或线程间通信(IPC)机制,如管道、消息队列、套接字等,来复制数据。这些复制操作需要额外的时间和资源。而共享内存允许多个进程或线程直接访问相同的内存区域,无需数据复制,因此可以显著减少数据传输的开销。
2)快速访问:共享内存允许多个进程或线程同时访问相同的内存区域,这可以提高数据访问的速度。因为数据存储在物理内存中,而不需要从一个进程或线程复制到另一个进程或线程,所以数据访问更加快速。
3)低开销:与某些IPC机制相比,如管道或套接字,共享内存的开销相对较低。这些IPC机制需要创建和管理额外的进程或线程,而共享内存只需要在内存中创建共享区域,并进行简单的同步控制。
4)适用于大数据量:共享内存特别适用于需要高效处理大量数据的应用程序,因为数据不需要复制,可以立即在多个进程或线程之间共享。
3.如何判断二叉树是二叉搜索树?
答:1)中序遍历验证:
-进行中序遍历(Inorder Traversal)二叉树;
-在遍历的过程中,检查每个访问的节点值是否按照升序排列(从小到大),如果所有节点都满足升序排列的条件,则该二叉树是BST。
2)递归验证:
-从根节点开始,递归地检查每个子树是否满足BST的条件;
-对于每个节点,确保其左子树的所有节点值都小于当前节点的值,右子树的所有节点值都大于当前节点的值;
-如果递归过程中的每个节点都满足这个条件,那么整个二叉树是BST。