在优化问题中,我在队列中保留了许多候选解决方案,我根据它们的优先级来检查.
每次我处理一个候选人时,它会从队列中删除,但它会产生几个新的候选人,使得候选人数呈指数级增长.为了处理这个问题,每当候选人被添加到队列中时,我就为每个候选人分配一个相关性,如果没有更多的空间可用,我用新的候选者替换(如果适当的话)队列中当前最不相关的候选人.
为了有效地做到这一点,我保留了一个大的(固定大小)数组与候选和两个链接的间接二进制堆:一个以递减的优先级顺序处理候选,另一个以递增的相关性处理候选.
这对我的目的来说足够有效,并且所需的补充空间大约是4个投注/候选人,这也是合理的.然而,编码很复杂,而且看起来并不是最佳的.
我的问题是,如果您知道更合适的数据结构或更自然的方式来执行此任务而不会降低效率.
我已经教了很多年的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重叠的功能?或者是否有更简单的方法向学生解释现有技巧?
这是我的问题.更具体地说,我正在尝试习惯Eclipse的调试器,我想知道在某些情况下打印到控制台是否仍然完成,或者它是否被认为是一种应该完全避免的不良做法.还有什么可以被认为是整体调试的好方法?
我有一个UITextField,我想在其中显示一个清除按钮.UITextField的cornerRadius已被修改,没有边框.我还在文本区域的左侧和右侧添加了填充.以下代码没有明确的按钮.
searchField.layer.cornerRadius = 15;
searchField.clearButtonMode = UITextFieldViewModeAlways;
UIView *padding = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 8, 20)];
searchField.leftView = padding;
searchField.leftViewMode = UITextFieldViewModeAlways;
searchField.rightView = padding;
searchField.rightViewMode = UITextFieldViewModeAlways;
[padding release];
[searchField addTarget:self action:@selector(textFieldDidChange) forControlEvents:UIControlEventEditingChanged];
searchField.userInteractionEnabled = YES;
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么我无法显示按钮?我很感激任何帮助.
谢谢!
我正在使用Visual Studio 2010和Resharper开发中型ASP.NET MVC解决方案.当我在1年半前开始开发它时,该项目非常快,但随着时间的推移,它变得越来越慢 - 不仅是编译,而且是ASP.NET重新初始化网站所需的时间.由于我经常练习TDD和重构,我经常需要重新编译重新运行我的测试,所以我正在寻找方法来缓解这种情况,如果可能的话.
这个问题详细
从开始重新编译项目到能够在Web浏览器中查看结果,我需要大约20-25秒.
使用Resharper测试运行器运行单个单元测试(仅一个测试,而不是整个套件)也非常慢(大约15-20秒).出于一些奇怪的原因,似乎Resharper大部分时间都在初始化测试运行并且只花费很小一部分实际运行测试.
我已经做了什么:
然而,我仍然坚持上述(慢?)数字,我觉得这会损害我的生产力.现在我想知道下一步该做什么.
我目前的系统设置:
我的解决方案的规格:
现在我的问题:
谢谢,
阿德里安
编辑:一个特别奇怪的事情是,当我点击"构建解决方案"按钮时,Visual Studio花了大约8秒钟向我显示一个等待符号,直到它实际开始编译并且正在更新编译窗口.在此期间,IDE是不受欢迎的.这是实际编译时间的很大一部分.我想知道Visual Studio在此期间做了什么?
Java中是否有一种方法(可能还有一个额外的开源库)来识别a中的捕获组java.util.regex.Pattern(即在创建匹配器之前)
Java文档中的示例:
捕获组通过从左到右计算它们的左括号来编号.在表达式((A)(B(C)))中,例如,有四个这样的组:
Run Code Online (Sandbox Code Playgroud)1 ((A)(B(C))) 2 (A) 3 (B(C)) 4 (C)
原则上应该可以从(编译的)模式中识别这些.
更新:从@Leniel和eslewhere看来,这个工具("命名组")将在2011年中期出现在Java 7中.如果我不能等待,我可以使用jregex虽然我不太确定API是什么是.
我通过以下代码得到了我认为的缩进错误
152 -- find the first one who can refute the scenario
153 let cs = map ($scenario) [ Suspect . getWho, Room . getWhere, Weapon . getHow ]
154 let (qs,rss) = break (not . null . intersect cs . hand) ps
155 unless (null rss) $ do
156 let refuter:ss= rss
157 let valid = intersect cs $ hand refuter
158
159 (refuter, shown) <- if cheated refuter
160 -- if the refuter is a cheater, just choose …Run Code Online (Sandbox Code Playgroud) 我有一个简单的INSERT查询,当主键是重复时我需要使用UPDATE.在MySQL中这似乎更容易,在Oracle中我似乎需要使用MERGE.
我能找到的MERGE的所有例子都有某种"源"和"目标"表,在我的例子中,源和目标是同一个表.我无法理解创建自己的查询的示例.
MERGE是唯一的方式,还是有更好的解决方案?
INSERT INTO movie_ratings
VALUES (1, 3, 5)
Run Code Online (Sandbox Code Playgroud)
它基本上是这个,主键是前2个值,所以更新将是这样的:
UPDATE movie_ratings
SET rating = 8
WHERE mid = 1 AND aid = 3
Run Code Online (Sandbox Code Playgroud)
我想过使用一个触发器,它会在调用INSERT时自动执行UPDATE语句,但前提是主键是重复的.这样做有什么问题吗?我需要一些关于触发器的帮助,因为我在尝试理解它们并做我自己时遇到了一些困难.
ucwords不能大写öüäize等外国字符
所以我需要一个解决方案,它将“öösel”变成“Öösel”
是否有使用regexp的简单方法,还是我必须手动检查所有字符?
为"不可变对象"创建类时,不可变意味着无法更改实例状态; 用Java(和类似语言)在构造函数中分配的所有字段,有时仍然允许创建修改后的实例.也就是说,使用实例作为基础,并创建一个仅由一个属性值不同的新实例; 来自基本实例的其他值.举一个简单的例子,可以有类:
public class Circle {
final double x, y; // location
final double radius;
public Circle(double x, double y, double r) {
this.x = x;
this.y = y;
this.r = r;
}
// method for creating a new instance, moved in x-axis by specified amount
public Circle withOffset(double deltaX) {
return new Circle(x+deltaX, y, radius);
}
}
Run Code Online (Sandbox Code Playgroud)
那么:应该调用什么方法"withOffset"?(注意:不应该是它的名字 - 但是这类方法叫做什么).从技术上讲,它是一种工厂方法,但对我来说似乎不太合适,因为工厂通常只给出基本属性(并且是静态方法,或者不是结果类型的成员,而是工厂类型).
所以我猜这些方法应该有一个更好的术语.既然这些方法可以用来实现" 流畅的界面 ",那么它们可能是"流利的工厂方法"吗?更好的建议?
编辑:正如其中一个答案所示,java.math.BigDecimal是一个很好的例子,它的'添加','减去'(等)方法.
另外:我注意到这个问题(Jon Skeet并没有减少)有点相关(虽然它询问方法的具体名称)
编辑,2014年5月:我目前最喜欢的是mutant factory,FWIW.
java ×3
c++ ×2
.net ×1
algorithm ×1
asp.net ×1
asp.net-mvc ×1
capitalize ×1
cocoa-touch ×1
const ×1
debugging ×1
hardware ×1
haskell ×1
immutability ×1
indentation ×1
insert ×1
merge ×1
oop ×1
oracle ×1
overloading ×1
php ×1
regex ×1
terminology ×1
uitextfield ×1
upsert ×1