与GPT的题目问答1
容器的选择
GPT: 在什么情况下,你会选择使用std::vector而不是std::list?请解释你的理由。
答:在存储大量且连续的数据会使用 vector,因为vector的容量的扩充是 以幂次扩充的它特别适合存储大量且连续的数据,相对于list 它还有迭代器的随机访问能力,时间复杂度是O1,这是list做不到的,std::vector在需要频繁随机访问和插入/删除操作主要集中在末尾时性能更优。相比之下,std::list在需要频繁在中间插入或删除元素时更合适,因为它的插入和删除操作不涉及大量元素的移动。
GPT: 描述std::map和std::unordered_map的主要区别,以及它们各自的使用场景。
答:他们两个的区别仅仅在于 ,std::map是基于红黑树实现的,键值对有序且键不允许重复。std::unordered_map是基于哈希表实现的,键值对无序但键同样不允许重复。如果需要保持元素的排序顺序,应该使用std::map;如果不需要排序但更关注查找效率,可以使用std::unordered_map,它提供平均O(1)的查找复杂度
迭代器的类型
GPT: 请解释std::vector的迭代器和std::list的迭代器的主要区别。
答: vector的迭代器的功能是就与list迭代器不同, 因为vector是动态数组所以迭代器的设计也会不同,功能的区别也是不同,vector的迭代器支持随机访问 而 List的迭代器只能去遍历去访问元素
GPT: 什么是反向迭代器(reverse iterator),在什么情况下会使用它?
答: 反向迭代器是做反向遍历的,从容器的末尾向头部遍历,反向迭代器可以用双向迭代器或随机访问迭代器作为基础迭代器
STL算法
GPT: std::sort和std::stable_sort的区别是什么?在什么情况下需要使用std::stable_sort?
答: sort是才用快速排序的算法,不保证稳定性,排序后可能相等的原始顺序被改变,stable_sort是保证稳定性的,就是相等的元素保持原始的顺序不动,这个稳定的代价是需要付出额外的空间复杂度,std::stable_sort通常在对具有相同排序键的对象进行排序时使用,以保留它们在原始输入中的相对顺序,这在一些特定应用场景下非常重要,如按多个字段排序时。
GPT: 如何使用STL算法来查找std::vector中的一个元素,并在找不到时插入该元素?
答: 查找自然是用find();
1 |
|
函数对象
GPT: 解释什么是函数对象(functor),并举一个自定义函数对象的例子。
答: 就是仿函数,它能像普通函数一样调用,同时它的灵活性更强,它的本质是一个类,就因为是类,他能存储内部状态,可以添加变量,他还能当作参数传给模板,成为一个自定义的类型
1 |
|