根据大多数C++引用,例如cplusplus.com,前向迭代器不需要是可赋值的(我的意思是,引用左值).但是,对于需要写入值的几个STL算法std::fill
(例如std::generate
等),规范使用了前向迭代器:
template <class ForwardIterator, class T>
void fill (ForwardIterator first, ForwardIterator last, const T& val);
Run Code Online (Sandbox Code Playgroud)
而等效行为需要左值取消引用:
template <class ForwardIterator, class T>
void fill (ForwardIterator first, ForwardIterator last, const T& val)
{
while (first != last) {
*first = val;
++first;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,它实际上是使用一个可变的前向迭代器和一次传递.
现在的问题是:
(1)为什么不明确这些情况下使用的前向迭代器是否可变?
(2)更新:我发现以下问题是愚蠢的:我暂时忘记了输出迭代器不需要支持相等比较.无论如何,上述问题仍然存在.
为什么使用前向迭代器,而不是输出迭代器std::fill
,std::generate
等等,而他们实际上并不需要多遍?(std::copy
例如,只需要输出迭代器.基本原理是什么?)
在排序a
的长度数组上考虑以下随机搜索算法n
(按递增顺序).x
可以是数组的任何元素.
size_t randomized_search(value_t a[], size_t n, value_t x)
size_t l = 0;
size_t r = n - 1;
while (true) {
size_t j = rand_between(l, r);
if (a[j] == x) return j;
if (a[j] < x) l = j + 1;
if (a[j] > x) r = j - 1;
}
}
Run Code Online (Sandbox Code Playgroud)
当从中随机选择时,该函数的Big Theta复杂度(下面和上面都有)的期望值x
是a
多少?
虽然这似乎是log(n)
,但我进行了一个指令计数实验,发现结果增长的速度比log(n)
(根据我的数据,甚至(log(n))^1.1
更适合结果)快一点.
有人告诉我,这个算法有一个确切的大theta复杂性(所以显然log(n)^1.1
不是答案).那么,您能否将时间复杂性与您的方法一起证明呢?谢谢.
更新:我的实验数据
log(n) …
我使用Prezto + zsh作为我的shell.我想在我的目录中更改目录的颜色ls
.例如,这是我目前拥有的:
显然,这并不好玩,因为我几乎无法读取我的目录,因为蓝色太暗了.我想将它改为白色或橙色或更轻的东西.
这种深蓝色仅适用于目录.文件显示在漂亮的白色文本中.我必须找到哪些设置和哪些设置才能更改此设置?
我刚刚在我的 Win10 PC 上重新安装了 Git,并尝试将 Git Bash 固定到我的任务栏。
现在由于某种原因,当我从任务栏快捷方式打开 Bash 时,它会在任务栏上显示重复的图标。我尝试固定该图标,但一旦结束终端会话,该快捷方式就会被删除。我尝试过多个 Win10 网站,但大多数都只是说重新固定新图标。
在更新之前,我可以毫无问题地固定它。
我有一个文件,将数字分配给md5sums,如下所示:
0 0000001732816557DE23435780915F75
1 00000035552C6F8B9E7D70F1E4E8D500
2 00000051D63FACEF571C09D98659DC55
3 0000006D7695939200D57D3FBC30D46C
4 0000006E501F5CBD4DB56CA48634A935
5 00000090B9750D99297911A0496B5134
6 000000B5AEA2C9EA7CC155F6EBCEF97F
7 00000100AD8A7F039E8F48425D9CB389
8 0000011ADE49679AEC057E07A53208C1
Run Code Online (Sandbox Code Playgroud)
另一个文件在每行中包含三个md5sums,如下所示:
00000035552C6F8B9E7D70F1E4E8D500 276EC96E149571F8A27F4417D7C6BC20 9CFEFED8FB9497BAA5CD519D7D2BB5D7
00000035552C6F8B9E7D70F1E4E8D500 44E48C092AADA3B171CE899FFC6943A8 1B757742E1BF2AA5DB6890E5E338F857
Run Code Online (Sandbox Code Playgroud)
我想要的是用第一个文件的整数替换第二个文件中的第一个和第三个md5sums.目前我正在尝试以下awk脚本:
awk '{OFS="\t"}FNR==NR{map[$2]=$1;next}
{print map[$1],$2,map[$3]}' mapping.txt relation.txt
Run Code Online (Sandbox Code Playgroud)
问题是尽管第一个文件在硬盘驱动器上仅为5.7g,但脚本需要更多的16g内存.
我有这种记忆技术来减少获取斐波那契序列号的调用次数:
def fastFib(n, memo):
global numCalls
numCalls += 1
print 'fib1 called with', n
if not n in memo:
memo[n] = fastFib(n-1, memo) + fastFib(n-2, memo)
return memo[n]
def fib1(n):
memo = {0:1, 1:1}
return fastFib(n, memo)
numCalls = 0
n = 6
res = fib1(n)
print 'fib of', n,'=', res, 'numCalls = ', numCalls
Run Code Online (Sandbox Code Playgroud)
但我被困在这里:memo[n] = fastFib(n-1, memo) + fastFib(n-2, memo)
和这里memo = {0:1, 1:1}
。每次我想获得一个号码的 fib 时,它是如何准确减少呼叫次数的?
我正在编写一个可以在 Ubuntu 14.04 中的普通 bash shell 中正常运行的脚本。然而,当它从 PyCharm 中运行时,我得到:
termios.error: (25, '不适合设备的 ioctl')
所需要的只是这段代码:
from prompt_toolkit import prompt
text = prompt('Give me some input: ')
print('You said: %s' % text)
Run Code Online (Sandbox Code Playgroud)
来自https://github.com/jonathanslenders/python-prompt-toolkit中的Python Prompt Toolkit “入门”示例,这是 python 3.4 虚拟环境中唯一安装的软件包。
由于这是 PyCharm 中集成调试器的运行方式,我该如何修复它以使调试器正常运行?
在OS X终端中,当less
它自己或其他程序调用时man
,在我们退出后它的输出将不会被写入ttyless
.例如,如果我们运行less README
,我们会暂时被引导到一个屏幕上
SO rocks.
README (END)
Run Code Online (Sandbox Code Playgroud)
按下之后q
,输出less
会消失,我们最终会得到类似的结果
$less README
$ # shell waiting for input
Run Code Online (Sandbox Code Playgroud)
但是,如果less
被调用git
(在我的情况下git
设置为寻呼机)则不是这种情况less -r
.退出后,输出less
始终写入tty.例如,如果我们运行git log --oneline
,如果日志很短less
则甚至不会被调用; 如果日志长于一个屏幕,那么我们会less
像往常一样暂时指向输出屏幕:
0000000 set the pager of git to less
......
1111111 what's wrong with git?
(END)
Run Code Online (Sandbox Code Playgroud)
按下之后q
,整个东西都被写入了tty,所以我们最终得到了类似的东西
$git log --oneline # OMG!!!
0000000 set the …
Run Code Online (Sandbox Code Playgroud) 正如标题中所说,我想知道该-k
选项(强烈)是否会影响 GNU 并行的速度。
在man parallel_tutorial
存在关于讨论--ungroup
和--line-buffer
,其声称--linebuffer
,其unmixes输出线,比要慢得多--ungroup
。那么-k
当工作数量很大时,也许也会导致大幅放缓?
(我没有在man parallel
或 中找到这个主题man parallel_tutorial
;我也没有在谷歌上找到任何东西。不过我还没有完成man parallel
,所以如果我错过了一些搜索较少的东西,请原谅。)
kevin@KEVIN-PC MINGW64 /C/MongoDB/bin
$ ls
bsondump.exe* mongodump.exe* mongoperf.exe* mongotop.exe*
libeay32.dll* mongoexport.exe* mongorestore.exe* ssleay32.dll*
mongo.exe* mongofiles.exe* mongos.exe*
mongod.exe* mongoimport.exe* mongos.pdb
mongod.pdb mongooplog.exe* mongostat.exe*
kevin@KEVIN-PC MINGW64 /C/MongoDB/bin
$ mongod.exe
bash: mongod.exe: command not found
Run Code Online (Sandbox Code Playgroud)
我在我的 windows8.1 上安装了 Windows 64 位 2008 R2+ 版本的 mongoDB。谁能告诉我为什么在启动 mongod.exe 时出现命令未找到错误?
algorithm ×2
awk ×1
bash ×1
c++ ×1
command-line ×1
git ×1
git-bash ×1
gnu-parallel ×1
iterator ×1
less-unix ×1
macos ×1
memoization ×1
mongodb ×1
prezto ×1
pycharm ×1
python ×1
python-3.x ×1
shell ×1
stl ×1
taskbar ×1
terminal ×1
windows-10 ×1
zsh ×1