小编tem*_*def的帖子

数组中的两个元素,其xor是最大的

给定一个整数数组,您必须找到两个XOR最大的元素.

有天真的方法 - 只需挑选每个元素和xoring与其他元素,然后比较结果找到对.

除此之外,有没有有效的算法?

arrays algorithm bit-manipulation xor

44
推荐指数
3
解决办法
3万
查看次数

简化const重载?

我已经教了很多年的C++编程课程,向学生解释的最棘手的事情之一是const重载.我通常使用类似矢量的类及其operator[]函数的示例:

template <typename T> class Vector {
public:
    T& operator[] (size_t index);
    const T& operator[] (size_t index) const;
};
Run Code Online (Sandbox Code Playgroud)

我很难解释为什么需要两个版本的operator[]函数,但在试图解释如何将两个实现统一起来时,我常常发现自己浪费了很多时间使用语言arcana.问题是,我知道如何使用const_cast/ static_casttrick 实现其中一个函数的唯一好的,可靠的方法是:/ trick:

template <typename T> const T& Vector<T>::operator[] (size_t index) const {
     /* ... your implementation here ... */
}
template <typename T> T& Vector<T>::operator[] (size_t index) {
    return const_cast<T&>(static_cast<const Vector&>(*this)[index]);
}
Run Code Online (Sandbox Code Playgroud)

这种设置的问题在于解释起来非常棘手,而且根本不明显.当你把它解释为"转换为const,然后调用const版本,然后去掉constness"时,它会更容易理解,但实际的语法是可怕的.解释什么const_cast是,为什么它的适当位置,以及它为什么几乎普遍不恰当的其他地方通常需要我五至十分钟的演讲时间,而这整个表达式的决策意识往往需要比之间的差异更多的精力const T*T* const.我觉得学生需要了解const-overloading以及如何在不必要地复制两个函数中的代码的情况下完成它,但是这个技巧在C++入门编程课程中似乎有些过分.

我的问题是 - 是否有一种更简单的方法来实现相互const重叠的功能?或者是否有更简单的方法向学生解释现有技巧?

c++ overloading const

42
推荐指数
4
解决办法
3962
查看次数

从int转到float并返回时,符号会发生变化

考虑以下代码,这是我实际问题的SSCCE:

#include <iostream>

int roundtrip(int x)
{
    return int(float(x));
}

int main()
{
    int a = 2147483583;
    int b = 2147483584;
    std::cout << a << " -> " << roundtrip(a) << '\n';
    std::cout << b << " -> " << roundtrip(b) << '\n';
}
Run Code Online (Sandbox Code Playgroud)

我的电脑(Xubuntu 12.04.3 LTS)上的输出是:

2147483583 -> 2147483520
2147483584 -> -2147483648
Run Code Online (Sandbox Code Playgroud)

请注意b往返后正数如何变为负数.这种行为是否明确规定?我原本期望int-to-float round-tripping至少能正确保存符号......

嗯,在ideone上,输出是不同的:

2147483583 -> 2147483520
2147483584 -> 2147483647
Run Code Online (Sandbox Code Playgroud)

g ++团队是否在此期间修复了错误,或者两个输出都完全有效?

c++ floating-point type-conversion ieee-754 twos-complement

42
推荐指数
2
解决办法
3279
查看次数

在VB字符串中转义双引号

我使用以下代码来执行schtasksVB6命令.执行时,如果文件夹包含空格,则忽略该文件夹.例如,"C:\program files\test\test.exe"将转换为"c:\program ".我该如何解决这个问题?

MyAppname =  Chr(34) & App.Path & "\" & App.EXEName & ".exe" & Chr(34)
StrCommand = "schtasks /create /sc ONLOGON /RL HIGHEST  /tn myapp  /tr " & MyAppname  
Shell StrCommand, vbHide   
Run Code Online (Sandbox Code Playgroud)

添加新任务"c:\program"而不是"C:\program files\test\test.exe"

提前致谢.

string vb6 escaping

41
推荐指数
2
解决办法
10万
查看次数

使运营商<<虚拟?

我需要使用虚拟<<运算符.但是,当我尝试写:

virtual friend ostream & operator<<(ostream& os,const Advertising& add);
Run Code Online (Sandbox Code Playgroud)

我得到编译器错误

错误1错误C2575:'operator <<':只有成员函数和基数可以是虚拟的

如何将此运算符设为虚拟?

c++ virtual operator-overloading operators

40
推荐指数
2
解决办法
3万
查看次数

AVL树和展开树之间的区别

我正在研究各种树木,并遇到了AVL树木和树木.我想知道

  1. AVL树和splay树有什么区别?
  2. 我们在什么基础上选择这些发辫?
  3. 这些树的积极和消极是什么?
  4. 这些树的大O符号表现如何?

algorithm avl-tree splay-tree binary-search-tree data-structures

39
推荐指数
1
解决办法
2万
查看次数

无上下文语法与上下文敏感语法?

有人可以向我解释为什么这种语法[无上下文语法和上下文敏感语法]接受一个字符串?

我所知道的是

无上下文语法是一种形式语法,其中每个生成(重写)规则是V→w的形式,其中V是单个非终结符号,w是一串终端和/或非终端.w可以是空的

上下文敏感语法是一种形式语法,其中任何生成(重写)规则的左侧和右侧可以被终端和非终结符号的上下文包围.

但是,我怎么能解释为什么这些语法接受一个字符串?

algorithm grammar parsing context-free-grammar context-sensitive-grammar

39
推荐指数
2
解决办法
4万
查看次数

原子变量是否无锁?

当我们谈论原子变量时,例如C++ 11 atomic<>,它是否可以免费锁定?或者锁定是不同的东西?如果我使用原子变量管理队列,它会比无锁队列慢吗?

c++ multithreading x86-64 atomic c++11

39
推荐指数
2
解决办法
1万
查看次数

为什么C++要求只为float,double或long double实例化复杂?

根据C++ ISO规范,§26.2/ 2:

将模板实例化为complexfloat(double或未long double指定)之外的任何类型的效果.

为什么标准作者会明确添加此限制?这使得它没有被指定,例如,如果你制造complex<int>或者complex<MyCustomFixedPointType>看起来像是人为限制会发生什么.

有这个限制的原因吗?如果要complex使用自己的自定义类型进行实例化,是否有解决方法?

我主要是问这个问题是因为早先的问题,其中OP对为什么abs给出奇怪的输出感到困惑complex<int>.也就是说,考虑到我们也可能想要用complex固定点类型,更高精度的实数等来制作数字,这仍然没有意义.

c++ math language-design complex-numbers

39
推荐指数
2
解决办法
1891
查看次数

如何使用强制转换编写hql查询?

我需要使用HQL,两者都具有共同的列合并2个表,但table1共同的列是integertable2普通列String

例如,

select a.id as id,a.name as name,b.address as address 
from Personal as a,Home as b 
where a.id=b.studid
Run Code Online (Sandbox Code Playgroud)

这里a.id是一个integer同时b.stduid是一个string,但两列的数据是一样的.

如何使用hql查询获取查询结果?

java hibernate hql

38
推荐指数
4
解决办法
7万
查看次数