给定一个整数数组,您必须找到两个XOR最大的元素.
有天真的方法 - 只需挑选每个元素和xoring与其他元素,然后比较结果找到对.
除此之外,有没有有效的算法?
我已经教了很多年的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重叠的功能?或者是否有更简单的方法向学生解释现有技巧?
考虑以下代码,这是我实际问题的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 ++团队是否在此期间修复了错误,或者两个输出都完全有效?
我使用以下代码来执行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"
提前致谢.
我需要使用虚拟<<运算符.但是,当我尝试写:
virtual friend ostream & operator<<(ostream& os,const Advertising& add);
Run Code Online (Sandbox Code Playgroud)
我得到编译器错误
错误1错误C2575:'operator <<':只有成员函数和基数可以是虚拟的
如何将此运算符设为虚拟?
我正在研究各种树木,并遇到了AVL树木和树木.我想知道
algorithm avl-tree splay-tree binary-search-tree data-structures
有人可以向我解释为什么这种语法[无上下文语法和上下文敏感语法]接受一个字符串?
我所知道的是
无上下文语法是一种形式语法,其中每个生成(重写)规则是V→w的形式,其中V是单个非终结符号,w是一串终端和/或非终端.w可以是空的
上下文敏感语法是一种形式语法,其中任何生成(重写)规则的左侧和右侧可以被终端和非终结符号的上下文包围.
但是,我怎么能解释为什么这些语法接受一个字符串?
algorithm grammar parsing context-free-grammar context-sensitive-grammar
当我们谈论原子变量时,例如C++ 11 atomic<>,它是否可以免费锁定?或者锁定是不同的东西?如果我使用原子变量管理队列,它会比无锁队列慢吗?
根据C++ ISO规范,§26.2/ 2:
将模板实例化为
complex除float(double或未long double指定)之外的任何类型的效果.
为什么标准作者会明确添加此限制?这使得它没有被指定,例如,如果你制造complex<int>或者complex<MyCustomFixedPointType>看起来像是人为限制会发生什么.
有这个限制的原因吗?如果要complex使用自己的自定义类型进行实例化,是否有解决方法?
我主要是问这个问题是因为早先的问题,其中OP对为什么abs给出奇怪的输出感到困惑complex<int>.也就是说,考虑到我们也可能想要用complex固定点类型,更高精度的实数等来制作数字,这仍然没有意义.
我需要使用HQL,两者都具有共同的列合并2个表,但table1共同的列是integer和table2普通列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查询获取查询结果?