4.左值和右值引用在模板编程中起什么作用?
答:移动语义、完美转发、改善性能、元编程(编译器可以根据不同的参数类型生成不同的代码路径)。
5.STL库迭代器失效场景?
答:1)插入和删除操作: 当你向容器中插入或删除元素时,可能会导致迭代器失效。这是因为插入或删除操作可能会导致容器重新分配内存或移动元素,从而使之前的迭代器无效。
2) 使用 vector 的push_back() 和 resize():当使用 std::vector 的 push_back() 方法添加元素时,如果vector 的大小已经达到容量(capacity),可能会导致重新分配内存,从而使所有迭代器失效; 使用 resize() 方法也可能导致迭代器失效,因为它可能会改变 vector 的大小,需要重新分配内存。
3)使用 std::list 的 splice():当使用 std::list 的 splice() 方法将元素从一个位置移动到另一个位置时,迭代器可能会失效,因为元素的位置发生了变化。
4) 使用 std::map 和 std::set 的插入操作: 在 std::map 和 std::set 中,插入元素可能会导致树结构的重新平衡,这可能会导致迭代器失效。
5)在循环中擅自删除元素:如果在循环中删除容器中的元素,而没有更新迭代器,那么删除一个元素后,迭代器将失效,可能导致未定义的行为。
解决方式:1.使用合适的迭代器类型、2.控制迭代器范围3.使用关联容器的erase()返回值(在关联容器中使用erase()方法时,它会返回一个指向下一个有效元素的迭代器,可以使用这个迭代器来继续迭代)、更新迭代器。
8.修改动态链接库什么样的代码,既需要编译动态链接库自身,也需要编译可执行文件?
答:修改动态链接库的源代码->重新编译动态链接库->重新编译可执行文件->链接到新的库版本->测试。