小编Ben*_*oit的帖子

"vaw"在正常模式下的vim中意味着什么(以及"caw"和"daw")?

我在vim:

foo barba[r]bar
foo
Run Code Online (Sandbox Code Playgroud)

[]表示光标位置

当我使用vaw或viw时,barbarbar是高位的.没关系.

但我想明白 - 为什么?v是视觉模式,a - 我不知道为什么,并且正常接近新词的开头.

我也检查了caw和ciw.第一个删除barbarbar并在foo之后留下光标没有空格,第二个会在foo之后留下空格,两个都进入插入模式...

那为什么它有效呢?在vim帮助中是否有任何反对意见?任何人都可以翻译为vim语言吗?

vim

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

为什么"删除*这个"会编译?

我从MFC派出一个类CDialogEx:

class MyDialog : public CDialogEx
{
  public:
    virtual void PostNcDestroy();
    …
  …
};
Run Code Online (Sandbox Code Playgroud)

我实施PostNcDestroy 如下:

void MyDialog::PostNcDestroy()
{
    CDialogEx::PostNcDestroy();
    delete *this; // oops, typo
}
Run Code Online (Sandbox Code Playgroud)

我很惊讶地看到这段代码编译(使用VC120或Visual Studio 2013),并且根本不会产生任何警告.任何人都可以告诉为什么会这样吗?

谢谢.

c++ mfc compilation

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

C++ STL :: inplace_merge和sort之间的区别是什么

据我所知,inplace_merge与sort完全相同,只是它只在某些情况下有效(当容器已经在两个已排序的部分时).

换句话说,这两者之间是否存在差异:

int first[] = {1,3,5,7};
int second[] = {2,4,6,8};
vector<int> v(8);
vector<int>::iterator it;
copy(first,first+4, v.begin());
copy(second,second+4, v.begin()+4);

inplace_merge(v.begin(), v.begin()+4, v.end())
Run Code Online (Sandbox Code Playgroud)

.

int first[] = {1,3,5,7};
int second[] = {2,4,6,8};
vector<int> v(8);
vector<int>::iterator it;
copy(first,first+4, v.begin());
copy(second,second+4, v.begin()+4);

sort(v.begin(), v.end())
Run Code Online (Sandbox Code Playgroud)

唯一的区别是效率吗?

c++ stl

7
推荐指数
2
解决办法
2930
查看次数

什么是在中间输出(n-1)个分隔符的n个项目列表的聪明方法?

假设我们有一个包含n个元素的数组(n> 0).

我们想输出这些元素的列表,它们之间有一个分隔符.

解决此问题的常见方法是:

foreach item
  (
    output item
    output separator
  )
trim last separator
Run Code Online (Sandbox Code Playgroud)

但是要做到这一点似乎有点混乱.

另一种方法是:

check that there is at least one element
loop
  (
     output element
     next element, or break if no more elements
     output separator
  )
Run Code Online (Sandbox Code Playgroud)

但我不确定它是否会一直有效.

您是否看到其他聪明的方法,例如在C,C++中?

language-agnostic algorithm optimization implementation

7
推荐指数
6
解决办法
505
查看次数

SQL 查询中空格是可选的吗?

我注意到使用 Oracle 或 SQLite,这样的查询是完全有效的

\n\n
SELECT*FROM(SELECT a,MAX(b)i FROM c GROUP BY\xc2\xa0a)WHERE(a=1)OR(i=2);\n
Run Code Online (Sandbox Code Playgroud)\n\n

SQL 的 \xe2\x80\x9cfeature\xe2\x80\x9d 是否不需要用空格包围查询的关键字或单词?如果是这样,为什么要这样设计?SQL 被设计为可读的,这似乎是一种混淆形式(尤其MAX(b)ii是用作别名的令牌)

\n

sql language-design

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

是否可以手动更改/重新排序修订号(提供的拓扑保持不变)?

在Mercurial中,修订号是特定于本地克隆的,它们作为一种工具提供,以比用户更友好的方式指向特定的变更集.

但是,当显示时间线图时,TortoiseHG将按修订号排序.如果某个人不经常提交提交,你将立即使用相邻的修订版号获得所有提交,并且它会弄乱图表的整个点.

在此输入图像描述

这个图表将更具洞察力:有两个开发线,两个作者,一个合并另一个的工作:

在此输入图像描述

因此,是否可以手动重新排序修订号(只要变更集的拓扑顺序仍然与新数字兼容?

谢谢.

mercurial tortoisehg

7
推荐指数
2
解决办法
3322
查看次数

Cmd:不评估循环内的变量

试图制作.bat脚本,并需要让一些字符串正常工作.

这是我到目前为止所得到的

@echo off
for /r %%i in (*.csv) do (
set str=%%i
set str=%str:csv=rar%
echo %%i
echo.%str%
)
Run Code Online (Sandbox Code Playgroud)

假设我已经在C:\中运行,并得到5 csv,1.csv,2.csv ... 5.csv

我第一次运行它,得到输出:

C:\1.csv

C:\2.csv

C:\3.csv

C:\4.csv

C:\5.csv
Run Code Online (Sandbox Code Playgroud)

我第二次得到:

C:\1.csv
csv=rar
C:\2.csv
csv=rar
C:\3.csv
csv=rar
C:\4.csv
csv=rar
C:\5.csv
Run Code Online (Sandbox Code Playgroud)

然后我得到所有后续电话:

C:\1.csv
rar=rar
C:\2.csv
rar=rar
C:\3.csv
rar=rar
C:\4.csv
rar=rar
C:\5.csv
Run Code Online (Sandbox Code Playgroud)

当我期待得到的是直接的:

C:\1.csv
C:\1.rar
C:\2.csv
C:\2.rar
C:\3.csv
C:\3.rar
C:\4.csv
C:\4.rar
C:\5.csv
C:\5.rar
Run Code Online (Sandbox Code Playgroud)

所以我删除了替换:

@echo off
for /r %%i in (*.csv) do (
echo %%i
set str=%%i
echo.%str%
)
Run Code Online (Sandbox Code Playgroud)

第一次运行:

C:\1.csv

C:\2.csv

C:\3.csv …
Run Code Online (Sandbox Code Playgroud)

cmd batch-file

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

如何使用FILE_SHARE_READ使CreateFile失败并使用FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE成功?

亲自尝试一下:

创建一个XLS文件,在Excel中打开它.

打开sysinternals Process Monitor,观察在资源管理器中复制XLS文件时发生的情况(只需点击ctrl-c ctrl-v).

::CreateProcess连续两次打电话.第一次调用请求读取权限,并拒绝访问.第二次调用要求读取加写入加删除和传递.

这是正常的吗?

windows file-io winapi process

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

当程序路径包含空格时,SQL*plus不会正确地标记其命令行参数

我使用SQL*Plus使用以下命令行:

sqlplus user/pw@TNS @test.sql foo
Run Code Online (Sandbox Code Playgroud)

内容test.sql如下:

SET VERIFY ON
DEFINE argone='&&1'
SELECT '&argone' FROM dual;
EXIT SQL.sqlcode
Run Code Online (Sandbox Code Playgroud)

结果:

  • 当SQL*Plus可执行文件中C:\Program Files\Oracle Client\whatever\sqlplus.exe,然后&&1计算到Files\Oracle.
  • 当SQL*Plus可执行文件中C:\Oracle\Client\10.2.xx\bin,然后&&1计算到foo.

有没有人遇到这个问题并有办法规避它?

oracle whitespace sqlplus

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

我怎样才能改进这个设计,迫使我声明一个成员函数const并声明变量是否可变?

由于某种原因,我正在迭代一个类的元素,std::set并希望稍微修改键,知道订单将保持不变.

迭代器std::setconst_iterators因为如果修改了密钥,则可能导致订单错误,从而导致设置损坏.但是我确信我的操作不会改变集合中元素的顺序.

目前,这是我的解决方案:

class Foo
{
public:
    Foo(int a, int b): a_(a),b_(b) {}
   ~Foo(){}
    bool operator < (const Foo& o) const { return this.a_ < o.a_ ; }
    void incrementB() const { ++b_; } // <-- the problem: it is not const!
private:
    const int a_;
    mutable int b_;                   // <-- I would like to avoid this
}

void f()
{
    std::set<Foo> s;
    // loop and insert many (distinct on a_) Foo elements;
    std::for_each(s.begin(), …
Run Code Online (Sandbox Code Playgroud)

c++ mutable set

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