小编Kir*_*rby的帖子

窗口批量FOR通过命令行循环开启

我想从命令窗口多次执行一个操作.常识告诉我FOR循环应该能够处理这个问题.果然,如果我想执行,比方说myProg.exe,我可以打开命令窗口并使用:

C:\> FOR %i in (1 2 3) DO myProg.exe
Run Code Online (Sandbox Code Playgroud)

简单.

但是,如果我想执行myProg.exe1000次呢?我想在FOR循环中指定一个范围,但是我很难看到如何执行此操作.

直观地说,似乎我应该能够执行以下某项操作:

C:\> FOR %i in (1 to 1000) DO myProg.exe
C:\> FOR %i in (1-1000) DO myProg.exe
Run Code Online (Sandbox Code Playgroud)

但是,当然,这不起作用.FOR循环将列表分别解释为3个令牌和1个令牌,因此分别myProg.exe仅执行3次和1次.


批文件解决方案

编写某种批处理(.bat)文件可能很容易:

SET COUNT=0
:MyLoop
    IF "%COUNT%" == "1000" GOTO EndLoop
    myProg.exe
    SET /A COUNT+=1
    GOTO MyLoop
:EndLoop
Run Code Online (Sandbox Code Playgroud)

但是,从命令行执行此操作是不是一种简单的方法?

windows for-loop cmd batch-file

22
推荐指数
2
解决办法
9万
查看次数

HashSet <T>(IEqualityComparer <T>)的查找时间复杂度是多少?

在C#.NET中,我喜欢使用HashSets,因为它们的查找时间复杂度为O(1).如果我要查询大量数据,我通常更喜欢将HashSet用于List,因为它具有这种时间复杂性.

令我困惑的是HashSet的构造函数,它将IEqualityComparer作为参数:

http://msdn.microsoft.com/en-us/library/bb359100.aspx

在上面的链接中,备注注意到"构造函数是一个O(1)操作",但如果是这种情况,我很好奇,如果查找仍然是O(1).

特别是,在我看来,如果我要编写一个Comparer来传递给HashSet的构造函数,每当我执行查找时,必须在每个键上执行Comparer代码以检查是否存在一场比赛.这不是O(1),而是O(n).

当元素添加到集合中时,实现是否在内部构建查找表?

一般来说,我如何确定有关.NET数据结构复杂性的信息?

c# complexity-theory runtime hashset

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

VS即时窗口的C++声明

最近我发现在调试时可以在Visual Studio立即窗口中声明变量.这个功能非常有用,因为如果我想在该上下文中试验代码,我可以在不修改新窗口中的实际代码的情况下创建新变量,然后我可以在监视窗口中探索它们.

这对于我一直在调试的C#项目非常有用,但是现在我正在尝试为不同项目中的基本C++声明做同样的事情.我在断点处断开,并在紧邻窗口中键入以下内容:

int myVariable;
Run Code Online (Sandbox Code Playgroud)

这给出了错误:

CXX0013: Error: missing operator
Run Code Online (Sandbox Code Playgroud)

是否有任何步骤可以让它与C++项目一起使用?

c++ immediate-window visual-studio

10
推荐指数
1
解决办法
5018
查看次数

有没有一种标准的方法来确定va_args的数量?

我正在使用va_args在C++中尝试变量参数.这个想法很有用,而且确实是我通过params功能在C#中使用了很多东西.让我感到沮丧的一件事是关于va_args的以下摘录,如上:

另请注意,va_arg不会确定检索到的参数是否是传递给函数的最后一个参数(或者即使它是超过该列表末尾的元素).

我发现很难相信没有办法以编程方式确定从该函数本身传递给函数的变量参数的数量.我想执行以下操作:

void fcn(int arg1 ...)
{
    va_list argList;
    va_start(argList, arg1);

    int numRemainingParams = //function that returns number of remaining parameters
    for (int i=0; i<numRemainingParams; ++i)
    {
        //do stuff with params
    }
    va_end(argList);
}
Run Code Online (Sandbox Code Playgroud)

重申一下,上面的文档表明va_arg不确定检索到的arg是否是列表中的最后一个.但我觉得这些信息必须以某种方式获取.

有没有一种标准的方法来实现这一目标?

c++ variadic-functions

8
推荐指数
2
解决办法
447
查看次数

是否有SQL聚合函数计算的标准?

在同一查询中对同一聚合函数进行多次调用的SQL实现是否有标准?

例如,请考虑以下示例,基于流行的示例架构:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)>1000
Run Code Online (Sandbox Code Playgroud)

据推测,计算SUM(OrderPrice)的值需要计算时间.是对聚合函数的每次引用产生的成本,还是为特定查询存储的结果?

或者,对于这种情况,SQL引擎实现没有标准吗?

sql performance standards aggregate-functions

5
推荐指数
1
解决办法
501
查看次数

为什么ByteBuffer不保留putDouble和getDouble的索引?

我在理解ByteBuffer以下场景中的语义时遇到困难:

int sizeOfDouble = 8;
int numberOfDoubles = 4;
ByteBuffer testBuf = ByteBuffer.allocateDirect(sizeOfDouble*numberOfDoubles);

testBuf.putDouble(0, 1.0);
testBuf.putDouble(1, 2.0);
testBuf.putDouble(2, 3.0);
testBuf.putDouble(3, 4.0);

for (int i = 0; i < numberOfDoubles; ++i) {
    System.out.println("testBuf[" + i + "]: " + testBuf.getDouble(i));
}
Run Code Online (Sandbox Code Playgroud)

我希望看到我刚刚把ByteBuffer它打印到屏幕上的值.相反,我得到这个输出:

testBuf[0]: 4.959404759574682E-4
testBuf[1]: 32.50048828125
testBuf[2]: 32.125
testBuf[3]: 4.0
Run Code Online (Sandbox Code Playgroud)

第三个索引的值似乎符合我的预期:4.0.但为什么值和索引0,1和2与我插入的值(分别为1.0,2.0和3.0)不匹配?

我怀疑我误解了一些有关如何ByteBuffer工作的东西,但我无法在javadoc中找到它.

java bytebuffer

4
推荐指数
1
解决办法
69
查看次数

"剔除"单元测试的功能

我有各种方法,我想使用Visual Studio的C#内置单元测试功能进行单元测试.事情进展顺利,但我遇到了一个场景,我希望"删除"对特定函数调用的依赖.

也就是说,我有一些方法有以下格式:

public class ClassWithMethodsIWantToUnitTest 
{
    public void myFcn(object someArg)
    {
        ...
        LoggerService.Instance.LogMessage("myMessage");
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,我希望我的单元测试能够简单地验证是否发生了对"LogMessage"的调用.我不想实际检查日志文件或任何东西.我想要一种方法来查看LoggerService行是否已被命中并执行.

LoggerService是一个单例,如果可能的话,我不想仅为单元测试修改代码.

基于这个问题的格式,在我看来应该可以以某种方式控制我的单元测试中的代码.换句话说,有没有办法让我制作一个虚假版本的LogMessage,以便我可以将它用于我的单元测试?我不希望在可能的情况下调用"真正的"LogMessage函数.我只想测试代码是否达到了调用函数的路径.

这有意义吗?这可能吗?

c# testing unit-testing

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

位移X比位移X倍快?

问题#1

在Java中,使用单个语句移动相同数量的转移费用是多倍?

例如,是

int x = 5;
x = x << 16;
Run Code Online (Sandbox Code Playgroud)

比...快

int x = 5;
for (int i=0; i<16; ++i) {
    x = x << 1;
}
Run Code Online (Sandbox Code Playgroud)

那么,怎么样

int x = 5;
for (int i=0; i<16; ++i) {
    x = x*2;
}
Run Code Online (Sandbox Code Playgroud)

编辑:"x << 16"的精确性能是什么?它与"x << 1"的速度相同吗?

问题2

我是否可以使用在线资源来确定Java中的各种按位操作性能,这样我就不必浪费StackOverflow用户的时间了?:-)

java bit-manipulation bit-shift

1
推荐指数
1
解决办法
1545
查看次数

为什么不用更大的确定性类型实现BitSet?

这里的Java引用表明布尔类型虽然用"位"信息表示,但没有精确定义的大小.相比之下,其他类型似乎表明大小是定义的.例如,int是32位,故事结束.

当我们查看BitSet的规范时,我们可以看到它由布尔值组成.通过上面的参考,这似乎表明BitSet的"大小" 是未定义的 - 毕竟它由布尔值组成.果然,文档指定:

请注意,大小与位集的实现有关,因此它可能随实现而改变.

所以我的问题是,为什么不使用精确定义的另一种数据类型实现BitSet呢?例如,如果我们使用一个字节,我们可以保证8位的大小,我们不会觉得大小可能不是我们认为的大小.确实,大小必须能够被8整除,但至少它看起来更具有尺寸确定性.

如果我们的系统绝对不能超过某个内存容量,那么在大小方面实现精确的BitSet实现似乎很有用.

java bits bitsets primitive-types bitset

0
推荐指数
1
解决办法
545
查看次数