- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为 A* 搜索算法实现开放列表 (OL) 类。 OL 基本上是搜索节点的专用优先级队列。在描述 A* 算法的伪代码中经常看到这样的符号:
successorNode -> OL // put the successor node into OL
...
curNode <- OL // get the best node from OL and store it in curNode
三个问题:
我的 OL 类通过重载移位运算符来支持类似的符号是否有意义:
OL ol;
...
OL << successorNode;
...
OL >> curNode;
(仅当对 1. 的回答为"is"时)我能否尽可能地支持这一点(即 cout
和 cin
用于内置类型):
OL ol;
...
successorNode >> OL;
...
curNode << OL;
(仅当 1. 的答案为"is"时)移位运算符的这种用法对标准容器是否有意义:
vector<int> v;
v << 5; // instead of v.push_back(5)
编辑:这个问题的目的有两个:
询问提议的设计是否违反了重载运算符应该模仿这些运算符对内置/标准类型的含义的原则。
询问为什么不使用移位运算符来简化标准容器的使用。
最佳答案
您问题的答案很可能主要基于个人意见,因为没有硬性规定允许/禁止这种运算符重载的使用。因此,我将提出论据来帮助您决定这是否是一个好主意,而不是硬性回答。
关于您的前两个问题:
从最小意外原则的角度考虑一下。如果有人看到你的代码,他会期待什么?会立即清楚这是什么意思,或者,作为相反的极端,他(她)会期待完全不同的东西吗?如果适用,重载值得惊喜吗?比如,了解了operators是干什么的,是不是让代码更清晰?如果利大于弊,那就去吧!否则,不要。
作为这一点的一个侧面节点,我什至遇到了这样的论点,即 iostream 运算符是运算符重载的一个坏例子,因为它们不移动整数。但是,我倾向于不同意,并将其视为个人意见。
应用于您当前的情况:用户可能希望通过调用接线员获得其他结果吗?例如。他可能会期待队列中的另一个结果吗?如果是这样,请不要重载。还是希望用户熟悉伪代码符号,并看到相似之处?如果是这样,请重载!
关于第三个问题:
有些人同意,有些人不同意。例如,Qt 框架的容器支持这种用法:
QList<int> list;
list<<5;
总结:
答案取决于它是否使您的代码更具可读性(当然还有个人意见)。
注意:所有这些仅适用于没有风格指南或禁止使用运算符重载的情况!
关于c++ - 为 I/O 以外的事物重载移位运算符是否是一个好的设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31605526/
Redis的事务是什么 Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会
我刚找到这个: a = (None,) print (a is True) print (a is False) print (a == True) print (a == False) print
我尝试将 FCM 与 Android Things 结合使用。我已经导入了 google json,在 list 中进行了更改,将应用程序订阅了主题,但我没有收到推送消息。我唯一得到的是来自服务器的
嘿。我有一个客户端服务器应用程序。服务器监听某个端口,并为每个客户端生成一个管理它的线程。这是基于套接字的,类似于 this但是客户端在 Swing 接口(interface)启动时连接,它会不时调用
您如何通过 ADB for Android Things 截取屏幕截图?我试过了: adb shell screencap -p /sdcard/screen.png adb pull /sdcard
我在理解此代码中的“Callable”时遇到了一些麻烦。我的老师笔记中没有太多细节。 template double averageTime(int iterations, Call
我有一个运行 Android Things 的 Raspberry Pi 3。为简单起见,假设它仅旋转步进电机。 为了再次简化事情,步进电机通过逐个线圈地告诉哪些线圈充电和哪些不充电来旋转。在 Ras
我一直觉得在 WPF 中设计表单布局就像设计网站布局一样。有没有一种工具可以让我直观地设置东西?我主要来自 WinForms 环境,花 2 个小时来布置表单设计并让它不完全按照您想要的方式出现是很烦人
我想在我的应用程序中重用 UITableViewCell,但我收到此错误:在隐式展开可选值时意外发现 nil。 我发现这是因为 UITableViewCell 中的 UI 东西是 nil,所以我的应用
我明天有考试,我想了解线性排序是什么样的,但是当我在谷歌上查找它时,我得到插入排序是一回事吗? 最佳答案 所有 C++ 标准保证的是 std::sort 是 O(N·log(N)。 关于c++ - 在
假设我有一个名为 Poem 的类(class)。 class Poem{ virtual void recite() = 0; } 我有数百个描述子类的 .cpp 和 .hpp 文件,如下所示
我们的主页有我们组织的 JSON-LD。我们的产品页面也应该有那 block 代码吗? 如果 Google 抓取我们的产品页面之一并找到 @type: Organization 和 @type: Pr
我正在使用 PHP 来使用不属于我的服务。该服务返回的内容几乎但不完全不同于 JSON(帽子提示,HGG)。 即,在最简单的形式中,它们看起来像这样 {a: 8531329} 通过json_decod
标题很冗长,可能令人困惑,但我不知道如何让它变得更好......我希望能够访问数组列表中的值并将其打印出来。 我有一个名为 ThingBagInterface 的接口(interface)。这个 Th
我通过调用成功显示了 Android 日期设置: startActivityForResult(new Intent(android.provider.Settings.ACTION_DATE_SET
这个问题在这里已经有了答案: Is there a simpler way to check multiple values against one value in an if-statement
我是一名优秀的程序员,十分优秀!