Qsort 在 C++ 中不适用于哪些类型?

2024-01-08

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_someElements 最终会指向错误的元素。

我的问题是:还有哪些其他类型不能使用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(使用前将#替换为@)

Qsort 在 C++ 中不适用于哪些类型? 的相关文章

  • 如何指定 set precision 舍入

    当流到 std 输出时 我可以指定 set precision 对双精度值进行舍入吗 ofile lt lt std setprecision 12 lt lt total run time TIME lt lt n Output 0 75
  • 在单个 C# 泛型方法中返回可为 null 和 null?

    C 泛型方法是否可以返回对象类型或 Nullable 类型 例如 如果我有一个安全的索引访问器List我想返回一个值 稍后我可以使用以下任一方法检查该值 null or HasValue 目前我有以下两种方法 static T SafeGe
  • C 语言中的套接字如何工作?

    我对 C 中的套接字编程有点困惑 You create a socket bind it to an interface and an IP address and get it to listen I found a couple of
  • 枚举 EMF 时丢失文本

    我在列举发票 emf http www mediafire com kdjwvvo7odyvwa6并将其复制到另一个但文本丢失了 令人惊讶的是 当我将其输出到窗口时 它绘制得非常完美 int CALLBACK EnhMetaFileProc
  • 如何通过实体键添加/删除与实体框架的多对多关系?

    I tried using Entities e new Entities EntityKey key new EntityKey Entities Users UserId 20 User user new User EntityKey
  • .NET:EventHandler 竞争条件修复如何工作?

    以下模式用于在引发事件时避免竞争条件 以防另一个线程取消订阅 MyEvent 使其为空 class MyClass public event EventHandler MyEvent public void F EventHandler h
  • 如何在Qt3D中优化点云渲染

    我正在尝试使用 Qt3D 显示大型点云 20M pts 我第一次发现这个图书馆https github com MASKOR Qt3DPointcloudRenderer https github com MASKOR Qt3DPointc
  • 用于轻松动态反射的 C# 库

    是否有任何库 例如开源项目等 可以更轻松地使用复杂的反射 例如动态创建对象或类 检查实例等 Thanks 有一个LinFu http www codeproject com KB cs LinFuPart1 aspx可用的库除了反射之外还可
  • 会员提供商使用还是不使用?

    我正在开发一个使用 Facebook 的网站 现在为了管理用户我想使用MembershipProvider并选择开发一个定制的会员提供商 我的问题是我的数据库架构与标准成员资格架构不匹配 并且提供的用于覆盖的函数采用与我预期不同的参数 例如
  • 扩展一个类

    编辑回答 虽然我最初的问题并没有完全按照康拉德 鲁道夫提供的答案所解决的方式解释我的需求 但他 无意或有意 基本上为我写了我想写的内容 类本身不会被扩展 但通过使类了解新函数来扩展其功能 这些新函数允许它 类 处理更广泛的问题 我非常感谢您
  • cmake 包括其他目录中的 h 文件

    我在 cmake 项目下进行测试时遇到问题 我的项目是这样安排的 TerrainMap PointAccumulator heightQuadGrid Test 在 TerrainMap 目录中 CMakeLists txt 文件简单地概述
  • 如何在PropertyGrid中自定义绘制GridItem?

    我想以与所有者在 ListView 详细信息 和其他控件中绘制项目类似的方式在 PropertyGrid 中绘制属性值 如果将属性声明为 Color 类型 则其值将使用字符串描述旁边的颜色样本来绘制 如果属性是图像类型 则在字符串描述旁边绘
  • 为什么.net中的数组只实现IEnumerable而不实现IEnumerable

    我正在实现自己的 ArrayList 类 当我意识到这一点时 我感到很惊讶 public System Collections Generic IEnumerator
  • 如何查明我的字符串是否包含“micro”Unicode 字符?

    我有一个包含实验室数据的 Excel 电子表格 如下所示 g L ppb 我想测试希腊字母 是否存在 如果发现我需要做一些特别的事情 通常 我会写这样的东西 if cell StartsWith matchSequence lt unive
  • 如何获取数字列的确切类型,包括。规模和精度?

    有没有办法知道列中列的确切类型DataTable 现在我正在这样做 DataTable st dataReader GetSchemaTable foreach DataColumn col in st Columns var type c
  • Opencv 对象检测:ORB GPU 检测器和 SURF GPU 描述符提取器

    我只是做了一个小实验来尝试不同的检测器 描述符组合 我的代码使用 ORB GPU 检测器来检测特征 并使用 SURF GPU 描述符来计算描述符 我使用 BruteForceMatcher GPU 来匹配描述符 并使用 knnMatch 方
  • Image.Save 异常“GDI+ 中发生一般错误。”保存到 MemoryStream 时

    我有一个服务器客户端应用程序 我想从服务器获取屏幕截图 但在线bitmap Save ms System Drawing Imaging ImageFormat Png 我得到这个例外 A generic error occurred in
  • C++11 中引入了哪些重大更改?

    我知道 C 11 中至少有一项更改会导致一些旧代码停止编译 引入explicit operator bool 在标准库中 替换旧实例operator void 诚然 这将破坏的代码可能是一开始就不应该有效的代码 但它仍然是一个破坏性的变化
  • 创建进程的多个子进程并维护所有 PID 的共享数组

    我已经分叉了几次 并用 C 创建了一堆子进程 我想将它们所有的 PID 存储在一个共享数组中 PID 的顺序并不重要 例如 我创建了 32 个进程 我想要一个 32 个整数长的数组来存储每个 PID 并且每个进程都可以访问 最好的方法是什么
  • R中按字母顺序对每一行字符串进行排序

    我环顾四周 似乎找不到解决这个问题的好方法 我有一个包含行名称的列 我想按字母顺序对每一行进行排序 以便稍后可以识别具有相同名称但顺序不同的行 数据如下 names lt c John D Josh C Karl H John D Bob

随机推荐

  • Groupby 总和、索引与列结果

    对于以下数据框 df pd DataFrame group a a b b data 5 10 100 30 columns group data print df group data 0 a 5 1 a 10 2 b 100 3 b 3
  • 如何在 ASP.NET MVC 中的多个视图上正确填充控制器中 ViewData 的下拉列表

    我已经说过这一点大约一百万次了 但我对 ASP Net MVC 以及一般的 ASP NET 仍然是新手 所以很抱歉 如果这有点明显 好的 我有一个控制器将数据发送到两个视图 一个视图仅列出数据库中的数据 而另一个视图允许您分别编辑和添加记录
  • MySQL中如何设计类别和子类别?

    我有一个类别列表以及与每个类别关联的子类别数量 假设类别表称为 Cat 那么其中有热类别和冷类别 我有另一个名为 subcats 的表 然后我有以下内容 Cat ID Name 1 Hot 2 Cold SubCats SubCatID C
  • 计算用户给出的字符串中的唯一字符

    我必须编写一个程序来计算用户给出的字符串中的唯一字符 例如 abc 返回3 aabbccd 返回4 我不允许使用高级Java类 如Map Set等 我只能使用数组 字符串 for循环 while循环 if语句 我正在尝试使用嵌套循环 但对如
  • MQTT 客户端订阅 PostgreSQL 数据库更改

    我有一个定期更新的 PostgreSQL 数据库 并且想要将最新更改发布到 mosquitto 代理 执行此方法最优雅的方法是什么 好吧 这个想法很有趣 我正在使用 PostgreSQL 9 5 如果我在控制台中输入 CREATE LANG
  • 如何删除 NodeReference 字段中的节点 ID [nid:n]

    这是此链接的同一问题 删除节点引用自动完成中的 nid n https stackoverflow com questions 1515722 removing nidn in nodereference autocomplete 根据第一
  • 一个变量仅由一个线程读取,由另一个线程读取和写入,是否需要同步?

    Motive 我刚刚学习多线程的基础知识 还没有完成它们 但我想在学习之旅的早期提出一个问题 以引导我了解与我正在从事的项目最相关的主题 Main A 如果一个进程有两个线程 一个编辑一组变量 另一个只读取所述变量 从不编辑它们的值 那么我
  • azure 删除从我的应用程序服务返回的 Access-Control-Allow-Origin 标头

    我有两个服务在 Azure 上运行 a 网络服务 角度应用程序 expressjs an 应用服务 ASPNET核心应用程序 All the 网络服务所做的是查询应用服务对于以下端点 my app service azurewebsites
  • 将初始音量设置为手机铃声音量

    我试图做到这一点 以便当用户打开应用程序时 它将音乐的音量设置为手机铃声的音量 到目前为止 这是我的代码 但我不太确定 setVolume float float 上的参数是什么 android 文档没有很好地解释它 我的代码在这里做错了什
  • texture2D().r 和texture2D().a 是什么意思?

    我在用OpenGL ES在Android编程中 当我在着色器中将YUV NV21 转换为RGB时 例如 vec3 yuv vec3 texture2D u TextureY vTextureCoord r 0 0625 texture2D
  • 我们如何使用 ucrop 库自定义裁剪图像活动

    我正在使用一个 implementation com github yalantis ucrop 2 2 2 用于裁剪目的的库 谁能告诉我们如何编辑上面的设计 我们可以为此进行定制设计 UI 吗 因为上面的UI是从图库中选择图片时默认的 l
  • IE11 编辑值时将光标移动到输入开头

    我在一个项目上遇到了一个非常奇怪的问题 长话短说 我有记录利率的输入字段 因此在模糊时附加 并在焦点时删除 它在除 IE11 之外的所有浏览器上都能正常工作 由于某种原因 它将光标移动到输入的开头 这对于人们快速浏览并输入值来说很烦人 这是
  • Nodejs 中哈希字符串的网络安全编码

    我正在 Nodejs 中创建一个重定向器 我有一些价值观 比如 用户id 超级用户id 我想对这些进行哈希处理 以防止用户检索 url 并伪造其他人的 url 并进行 base64 编码以最小化创建的 url 的长度 http myurl
  • Soundcloud API 未通过 Python 返回播放列表中的所有曲目

    我最近开始使用 Soundcloud API 开发一个简单的应用程序 用于保存播放列表中的数据 然而 在我看来 并非播放列表中的所有曲目都会被返回 我正在使用以下代码 import soundcloud shelve time client
  • 如何获取折线图中的所有json值

    我有很多 Json 值 我将使用它们创建一个折线图 但它在图表中只显示一个值 我是 javascript 的新手 有一个想法在图表中绘制所有值 请任何人给出这个问题的 jsfiddle 示例 HTML代码 div class chart S
  • 如何从两个数组列表中删除公共值

    我们如何从两个 ArrayList 中删除公共值 假设我有两个 Arraylist 如下所示 ArrayList1 1 2 3 4 ArrayList1 2 3 4 6 7 我希望得到的结果是 ArrayListFinal 1 6 7 我该
  • 运行 Rails 代码/初始化程序但不通过 Rake

    我的应用程序不断遇到重复出现的问题 基本上 我有一些代码希望它在第一次启动服务器时运行 以检查某些内容是否已定义 例如计划 数据库中的特定列 文件的存在等 然后采取相应的行动 但是 我绝对不希望在启动 Rake 任务 或执行 生成 等操作
  • backgroundTaskHost.exe 退出并显示代码 1 (0x1)

    我正在创建一个 Windows 应用商店应用程序 该应用程序具有用于后台任务的 Windows 运行时组件 该解决方案在 Visual Studio 中构建时没有任何问题 但当触发后台任务时 它总是失败并显示消息 程序 4204 backg
  • 如何使用 Dapper.Contrib 正确“单一化”表名?

    我有一个 Net Core 3 1 控制台应用程序 在SQL Server数据库中 我有单数名称的表 与我的POCO类相同 这方便匹配和维护 对于我想使用的插入 更新和删除操作Dapper Contrib图书馆 但是 当我运行 Insert
  • Qsort 在 C++ 中不适用于哪些类型?

    std sort通过使用交换元素std swap 它又使用复制构造函数和赋值运算符 保证您在交换值时获得正确的语义 qsort通过简单地交换元素的底层位来交换元素 忽略与要交换的类型相关的任何语义 虽然qsort尽管不了解您正在排序的类型的