也就是说,如何在不删除迭代器的情况下获取迭代器的下一个元素?因为我可能会或可能不想根据其内容删除它.我有一个文件扫描程序,我使用Scanner next()方法迭代XML标记.
提前致谢.
我被要求在C中获取不同类型的内部二进制表示.我的程序目前在'int'中正常工作,但我想用"double"和"float"来使用它.我的代码看起来像这样:
template <typename T>
string findBin(T x) {
string binary;
for(int i = 4096 ; i >= 1; i/=2) {
if((x & i) != 0) binary += "1";
else binary += "0";
}
return binary;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用"double"或"float"实例化模板时,程序失败.
假设我有一个功能列表
functions = [f, g, h]
Run Code Online (Sandbox Code Playgroud)
每一个都有类型 a -> a
我还有一个值列表,比如数字,但任何东西都应该在这里工作
vals = [1,2,3]
Run Code Online (Sandbox Code Playgroud)
我想将每个函数应用functions到相应的值中vals
我的第一直觉是使用lambda和zipWith,如:
zipWith (\f v -> f v) functions vals
Run Code Online (Sandbox Code Playgroud)
但坦率地说,这看起来很难看,而不是像Haskell这样的好语言.功能应用程序功能听起来像解决方案.有这样的事吗?我错过了什么,我的问题有一个更好的解决方案吗?我实际上最终为Project Euler解决方案编写了这个构造.它有效,但我不喜欢它.
假设我们有一个0索引序列S,取S [0]并将其插入S中的下一个值高于S [0]且前一个值低于S [0]的位置.形式上,S [i]应该放置在S [i-1] <S [i] <S [i + 1]的地方.按顺序继续按顺序对每个项目执行相同操作.在将元素放入正确的位置之前,从列表中删除元素.在列表上进行一次迭代后,应该对列表进行排序.我最近参加了考试,我忘了插入排序(不要笑),我这样做了.但是,我的教授认为这是错误的.据我所知,该算法确实产生了一个排序列表.
在列表中这样工作:
Sorting [2, 8, 5, 4, 7, 0, 6, 1, 10, 3, 9]
[2, 8, 5, 4, 7, 0, 6, 1, 10, 3, 9]
[2, 8, 5, 4, 7, 0, 6, 1, 10, 3, 9]
[2, 5, 4, 7, 0, 6, 1, 8, 10, 3, 9]
[2, 4, 5, 7, 0, 6, 1, 8, 10, 3, 9]
[2, 4, 5, 7, 0, 6, 1, 8, 10, 3, 9] …Run Code Online (Sandbox Code Playgroud) 假设
f x y z = x*y*z
Run Code Online (Sandbox Code Playgroud)
然后我希望与列表的每个成员一起返回f的三次应用程序
foldl ($) f [1,2,3]
Run Code Online (Sandbox Code Playgroud)
就像是 (((f 1) 2) 3) = 1*2*3 = 6
函数f将是累加器,并且折叠的每次迭代将应用一个参数并返回部分应用的函数作为下一个累加器.
为什么这不起作用?是因为f迭代时改变了类型吗?
旁白:有没有其他方法可以完成这种类型的功能应用程序?