我有一些Vim函数可以更改文档格式.当我调用此函数时,我目前使用类似以下内容来保存和恢复我的光标位置:
func! Foo()
:norm mz
...
:norm `z
endf
Run Code Online (Sandbox Code Playgroud)
这样可以正确地保存光标位置,但有时会改变窗口位置,以便当前行从靠近屏幕顶部移动到靠近底部,反之亦然.有没有办法保留光标位置和线的屏幕位置?
在Vim中是否有任何与o
or 相同的命令O
(在当前的一个之前/之后插入一个空行),但是它也没有切换到插入模式?
我在解析文本文件时构建了两个数组.第一个包含列名,第二个包含当前行的值.我需要一次迭代两个列表来构建一个地图.现在我有以下内容:
var currentValues = currentRow.Split(separatorChar);
var valueEnumerator = currentValues.GetEnumerator();
foreach (String column in columnList)
{
valueEnumerator.MoveNext();
valueMap.Add(column, (String)valueEnumerator.Current);
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但它并不能完全满足我的优雅感,如果阵列的数量大于2,它会变得非常毛茸茸(我偶尔也会这样做).有没有人有另一个更高级的成语?
我有一个Java阅读器应用程序,它从Linux 64位平台(2.6.18)上的多播套接字读取.套接字大小已设置为2 MB.当读取器无法快速读取时,套接字"溢出",即从缓冲区中丢弃数据包.
我想知道的是Linux内核如何将数据包从套接字缓冲区中删除.我假设套接字缓冲区本身是FIFO缓冲区.但是,如果它已满,会发生什么?是否会丢弃下一个数据包(缓冲区内容不会改变)?或者新数据包会替换缓冲区中的旧数据包吗?如果是,哪个数据包(最老的?,最年轻的?,一个随机选择的数据包?)?
感谢您的任何见解.
在进行一些Powershell自动化时,我遇到了.cmd
自动捕获文件写入stdout的数据的问题.我有两个函数可以执行以下操作:
function a {
& external.cmd # prints "foo"
return "bar"
}
function b {
$val = a
echo $val # prints "foobar", rather than just "bar"
}
Run Code Online (Sandbox Code Playgroud)
基本上,external.cmd
发送到stdout的数据被添加到返回值a
,即使我真正想要返回的a
是我指定的字符串.我怎么能阻止这个?
我正在使用STL函数count_if来计算双精度矢量中的所有正值.例如,我的代码是这样的:
vector<double> Array(1,1.0)
Array.push_back(-1.0);
Array.push_back(1.0);
cout << count_if(Array.begin(), Array.end(), isPositive);
Run Code Online (Sandbox Code Playgroud)
其中函数isPositive定义为
bool isPositive(double x)
{
return (x>0);
}
Run Code Online (Sandbox Code Playgroud)
下面的代码将返回2.有没有办法在不写我自己的函数isPositive的情况下执行上述操作?我可以使用内置功能吗?
谢谢!
我正在尝试编写一个C++模板函数,它将在不同整数类型之间的转换中抛出整数溢出的运行时异常,具有不同的宽度,以及可能的有符号/无符号不匹配.出于这些目的,我不关心从浮点类型转换为整数类型,也不关心其他对象到对象的转换.我想这样做而不必写很多特殊的案例代码.这就是我目前拥有的:
template< typename T, typename R > void safe_cast( const T& source, R& result )
{
// get the maximum safe value of type R
R rMax = (R) ~0;
if ( rMax < 0 ) // R is a signed type
{
// assume that we're on an 8-bit twos-compliment machine
rMax = ~( 0x80 << ( ( sizeof( R ) - 1 ) * 8 ) );
}
if ( ( source & rMax ) != source ) …
Run Code Online (Sandbox Code Playgroud) 假设我有一个int向量,我已经预先填充了100个元素,值为0.
然后我创建2个线程并告诉第一个线程用数字填充元素0到49,然后告诉线程2用数字填充元素50到99.可以这样做吗?否则,实现这一目标的最佳方法是什么?
谢谢
关于如何实现双向枚举器(这里,这里)的问题已被问过几次.我的问题不是如何(对于大多数情况来说这是微不足道的),但为什么 .NET平台中不存在这样的类型.
public interface IBidirectionalEnumerator<T> : IEnumerator<T>
{
bool MovePrev();
}
Run Code Online (Sandbox Code Playgroud)
显然,有许多集合类型无法实现这一点,因为它MoveNext()
是破坏性的或改变底层集合的状态.但反过来,很多类型可以平凡实现这一点(List
,IList
,LinkedList
,array
).
为什么不存在这种类型?
我的函数的参数f()
必须实现两个不同的接口,这些接口通过继承彼此无关,IFoo
并且IBar
.我知道有两种不同的做法.第一种是声明一个从两者继承的空接口:
public interface IFooBar : IFoo, IBar
{
// nothing to see here
}
public int f(IFooBar arg)
{
// etc.
}
Run Code Online (Sandbox Code Playgroud)
这,当然,要求班宣布自己执行IFooBar
,而不是IFoo
和IBar
独立.
第二种方法是f()
使用约束制作泛型:
public int f<T>(T arg) where T : IFoo, IBar
{
// etc.
}
Run Code Online (Sandbox Code Playgroud)
您更喜欢哪一个,为什么?每个都有任何非明显的优点或缺点吗?
c# ×3
c++ ×3
vim ×2
.net ×1
c ×1
casting ×1
enumerator ×1
enumerators ×1
generics ×1
ienumerator ×1
insert ×1
interface ×1
iterator ×1
linux ×1
linux-kernel ×1
networking ×1
powershell ×1
return-value ×1
sockets ×1
stdout ×1
stl ×1
templates ×1
vector ×1