这两个方法调用有什么区别?
HashSet<T>.IsSubsetOf()HashSet<T>.IsProperSubsetOf()我正在尝试针对以下问题提出算法:
我有一个整数三元组的集合 - 让我们称这些整数为A,B,C.存储在里面的值可能很大,所以通常不可能创建一个大小为A,B或C的数组.目标是最小化集合的大小.为此,我们提供了一个简单的规则,允许我们合并三元组:
换句话说,如果两个三元组的两个值相等,则删除这两个三元组,按位或删除第三个值,并将结果放入集合中.
贪婪的方法在类似的情况下通常会产生误导,所以这是针对这个问题,但我找不到一个简单的反例,它会导致正确的解决方案.对于包含正确解为14的250项的列表,通过贪婪合并计算的平均大小约为30(从20到70不等).随着列表大小的增加,次优开销变得更大.
我也尝试过设置位计数,但我发现没有有意义的结果.显而易见的事实是,如果记录是唯一的(可以安全地假设),则设置的位数总是增加.
这是愚蠢的贪婪实现(这只是一个概念性的事情,请不要考虑代码风格):
public class Record {
long A;
long B;
long C;
public static void main(String[] args) {
List<Record> data = new ArrayList<>();
// Fill it with some data
boolean found;
do {
found = false;
outer:
for (int i = 0; i < data.size(); ++i) {
for (int j = i+1; j < data.size(); ++j) {
try {
Record r = merge(data.get(i), data.get(j));
found …Run Code Online (Sandbox Code Playgroud) 我写了一个小服务,它充当本地网络服务器.为了编写服务,我按照MSDN教程,如何使用ServiceBase该类编写服务.
但是当我注册并启动服务时,我收到错误消息,如下所示.我在开始和服务停止时得到这些错误消息中的两个.(示例=服务名称).
示例服务报告了无效的当前状态0.
这是我服务的最小样本,包含所有相关部分.代码以MSDN教程中提供的枚举和结构定义开头:
public enum ServiceState
{
SERVICE_STOPPED = 0x00000001,
SERVICE_START_PENDING = 0x00000002,
SERVICE_STOP_PENDING = 0x00000003,
SERVICE_RUNNING = 0x00000004,
SERVICE_CONTINUE_PENDING = 0x00000005,
SERVICE_PAUSE_PENDING = 0x00000006,
SERVICE_PAUSED = 0x00000007,
}
[StructLayout(LayoutKind.Sequential)]
public struct ServiceStatus
{
public long dwServiceType;
public ServiceState dwCurrentState;
public long dwControlsAccepted;
public long dwWin32ExitCode;
public long dwServiceSpecificExitCode;
public long dwCheckPoint;
public long dwWaitHint;
};
Run Code Online (Sandbox Code Playgroud)
在此之后,我写的服务代码减少到相关部分:
namespace example
{
public partial class Service : ServiceBase
{
public Service()
: base()
{
this.ServiceName = "ExampleService"; …Run Code Online (Sandbox Code Playgroud) 我的服务崩溃了,我有这个堆栈跟踪.我无法从这里推断出任何东西
00007f859cd27834 __gnu_cxx::__verbose_terminate_handler()
@ 00007f859cd25865 __cxxabiv1::__terminate(void (*)())
@ 00007f859cd25892 std::terminate()
@ 00007f859cd263be __cxa_pure_virtual
@ 0000000001996f9f My::Class::~Class()
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
我enum class在代码中到处使用.有时候,命名空间会堆积起来,使代码的可读性降低:
_infoSign->setType(ui::InfoSign::Type::Ok);
Run Code Online (Sandbox Code Playgroud)
我知道,我可以用一个using声明来缩短它:
using Type = ui::InfoSign::Type;
_infoSign->setType(Type::Ok);
Run Code Online (Sandbox Code Playgroud)
using声明的缺点是自己的定义Type.如果enum名称更改为Foo,此代码将保留Type名称,并且必须手动更新.
Swift使用一种有趣的方式来处理枚举值:
enum CompassPoint {
case north
case south
case east
case west
}
func foo(dir: CompassPoint) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
对于函数调用,编译器将自动使用正确的上下文并允许使用非常短的形式来指定枚举值:
foo(.north)
Run Code Online (Sandbox Code Playgroud)
是否存在针对类似语法的C++提议?
在进行代码维护时,我找到了这样的代码:
auto networkEntry = _networkEntries[key];
networkEntry.port = port;
networkEntry.scope = scope;
Run Code Online (Sandbox Code Playgroud)
用于的地图数据类型_networkEntries有两个重载版本operator[]:
template<class T>
class Map {
// ... simplified STD compatible container ...
T & Map::operator[](const Key & key);
const T Map::operator[](const Key & key) const;
};
Run Code Online (Sandbox Code Playgroud)
地图中使用的数据类型很简单struct.
现在我只是想知道,返回的值auto可以是数据结构的副本,也可以是对数据结构的引用.如果返回副本,则分配不会影响映射中的存储值.
我对这个案子有三个相关的问题:
operator[]使用的是哪个版本?auto,以确保使用参考?