std::sort
通过使用交换元素std::swap
,它又使用复制构造函数和赋值运算符,保证您在交换值时获得正确的语义。
qsort
通过简单地交换元素的底层位来交换元素,忽略与要交换的类型相关的任何语义。
虽然qsort
尽管不了解您正在排序的类型的语义,但它对于非平凡类型仍然非常有效。如果我没记错的话,它适用于所有标准容器,尽管它们不是 POD 类型。
我认为前提是qsort
在类型上正确工作T
就是它T
是/可轻易移动的/。在我的脑海中,唯一不可移动的类型是那些具有内部指针的类型。例如:
struct NotTriviallyMovable
{
NotTriviallyMovable() : m_someElement(&m_array[5]) {}
int m_array[10];
int* m_someElement;
};
如果你对一个数组进行排序NotTriviallyMovable
那么m_someElement
s 最终会指向错误的元素。
我的问题是:还有哪些其他类型不能使用qsort
?
任何不是 POD 类型的类型都不能与qsort()
。可能还有更多类型可以使用qsort()
如果你考虑 C++0x,因为它改变了定义POD http://en.wikipedia.org/wiki/C++0x#Modification_to_the_definition_of_plain_old_data。如果您打算使用非 POD 类型qsort()
那么你就进入了 UB 的土地,恶魔会从你的鼻子里飞出来。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)