我想知道什么会让程序员选择Pimpl习语或纯虚拟类和继承.
我知道pimpl习惯用于为每个公共方法和对象创建开销提供一个明确的额外间接.
另一方面,Pure虚拟类带有继承实现的隐式间接(vtable),我理解没有对象创建开销.
编辑:但如果你从外面创建对象,你需要一个工厂
是什么让纯虚拟类比pimpl成语更不可取?
我正在尝试了解Mergesort的空间要求,O(n).
我看到时间要求基本上是,等级(logn)*merge(n)的数量使得(n log n).
现在,我们仍然在左右两个不同的阵列中为每个级别分配n个.
我知道这里的关键是当递归函数返回时,空格被释放,但我没有看到它太明显.
此外,我找到的所有信息,只是说明所需的空间是O(n),但不解释它.
任何提示?
function merge_sort(m)
if length(m) ? 1
return m
var list left, right, result
var integer middle = length(m) / 2
for each x in m up to middle
add x to left
for each x in m after middle
add x to right
left = merge_sort(left)
right = merge_sort(right)
result = merge(left, right)
return result
Run Code Online (Sandbox Code Playgroud)
编辑
好了,多亏了@Uri,这就是诀窍
我一开始没看到的是时间只是添加,而内存增加和减少,所以最大时间是在执行结束时,但是最大量内存位于递归堆栈的底部.
所以,如果我们继续添加n + n/2 + n/4 + n/8 ....我们添加多少次并不重要,它永远不会大于2n,当我们到达递归堆栈时从底部开始上升,我们不保留用于前一个分支的内存,因此在最大值时,2n将是所使用的内存量O(n).
我必须将几个字节从a复制istream到a ostream,我知道有两种方法可以执行此复制.
myostream << myistream.rdbuf();
Run Code Online (Sandbox Code Playgroud)
和
copy( istreambuf_iterator<char>(myistream),
istreambuf_iterator<char>(),
ostreambuf_iterator<char>(myostream)
);
Run Code Online (Sandbox Code Playgroud)
我发现该rdbuf版本至少是该版本的两倍copy.
我还没有找到复制方式,比方说100个字节,但由于要复制的大小可能会很大,我希望能够使用该rdbuf版本,如果可行的话.
如何将这些副本限制为给定的字节数?
我有一个用XML定义的ViewGroup,里面有一个视图,在onCreate时我想要一个变量.
我不想经历使用listview +适配器的麻烦因为我知道列表不会改变,因为onCreate()
这或多或少是我想要的代码.
TextView mytextview = myViewGroup.findViewById(R.id.mytext);
for(String test : strings){
mytextview = mytextview.clone();
mytextview.setText(test);
myViewGroup.addView(mytextview);
}
Run Code Online (Sandbox Code Playgroud)
但它没有用.
我在一个bash脚本中包装一个fastcgi应用程序,如下所示:
#!/bin/bash
# stuff
./fastcgi_bin
# stuff
Run Code Online (Sandbox Code Playgroud)
由于bash仅在前台脚本结束时执行信号陷阱,因此我不能kill -TERM scriptpid因为fastcgi应用程序将保持活动状态.
我已经尝试将二进制文件发送到后台:
#!/bin/bash
# stuff
./fastcgi_bin &
PID=$!
trap "kill $PID" TERM
# stuff
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,显然stdin和stdout没有正确重定向,因为它没有连接lighttpds mod_fastgi,前台版本确实有效.
编辑:我一直在看问题,这是因为bash在后台启动程序时将/ dev/null重定向到stdin,所以任何避免这种情况的方法也应该解决我的问题.
有关如何解决这个问题的任何提示?
我有以下代码:
<html>
Run Code Online (Sandbox Code Playgroud)
<style type="text/css">
DIV { display:inline; border: solid red 1px; }
.editable { background:yellow; }
</style>
Run Code Online (Sandbox Code Playgroud)
<div class="editable" contentEditable="true"> This is test text. This is test text.This is test text.This is test text.This is test text.Thihis is test text.This is test text.</div>
<div class="editable" contentEditable="true"> short </div>
<div class="editable" contentEditable="true"> This is test text.This is test text.This is test text.his is test text.Thihis is test text.Thihis is test text.Thihis is test text.Thi </div>
Run Code Online (Sandbox Code Playgroud)
我需要IE7(IE6不需要和FF3.x工作正常)正确包装文本,如果我从div中删除contentEditable ="true"它会这样做.只要尝试使用和不使用contentEditable的代码,你就会明白我的意思.使浏览器窗口足够小,以便您查看文本的包装方式.
谢谢.
我正与一位开发人员讨论是否有意识地侵入javascript私有函数.
替代方案是:
_function_name以便开发人员知道他们可以调用什么以及他们不能调用什么.我们不考虑其他方法,比如在表单的构造函数中创建私有函数,var private_var= function(){}因为每次对象实例化时都会触发所有这些函数的创建,并且每个对象都有自己的集合.
我们为他们提供的理由:
1
this或者它们需要被调用function.call(object)或者function.apply(object)2
我们怀疑,因为很多开发人员使用它,可能还有其他原因,比如性能等,就像这样使用.
由于我们对Javascript的了解非常有限,我们决定在stackoverflow中发布这个,以了解哪种方法更好,为什么.
我知道地图不准备排序.它针对快速和随机密钥访问进行了大量优化,实际上并不支持std::sort.
我目前的问题是我已经完整了map<std::string,int>,我将不再使用了.我只需要按value(int)顺序提取10对并销毁它.
如果可能的话,最好的方法是将它排序到位,然后迭代10次,但这显然不是解决方案.
我正在尝试使用不同的解决方案multimap<int,string>(允许重复键),但我想知道是否有更优雅的解决方案,使用stl算法和posible一样多.
编辑:
我正在使用地图,因为在99%的时间里,我需要它作为地图:快速键查找以增加值.当我不再需要地图时,只需要一个好的方法稍后提取值顺序.
目前的做法应该是:
std::copy在map(std::string,int)一个vector(pair(std::string,int))目前的情况是epoll_wait超过几个fds和一个可能的传入消息队列,我想在epoll_wait下面的循环在IO事件或新消息上执行.
我知道的方式:
timemsec超时并在循环中检查队列的第一件事上面发布的所有观点都不足以满足我的要求,我想知道是否还有其他方法我没有找到.
原因是:
想法?
我正在处理一种情况,我需要在屏幕中的分配间隙中设置一个字符串,因为我正在使用unicode len()和slices []显然在字节上工作,我最终将unicode字符串剪得太短,因为€只有占用屏幕中的一个空格,但是len()或slice []占用2个空格.
我已经正确设置了编码头,并且我愿意使用除slice或len()之外的其他东西来处理这个问题,但我真的需要知道字符串将采用多少空格以及如何将其剪切为可用空间.
$cat test.py
# -*- coding: utf-8 -*-
a = "2 €uros"
b = "2 Euros"
print len(b)
print len(a)
print a[3:]
print b[3:]
$python test.py
7
9
??uros
uros
Run Code Online (Sandbox Code Playgroud) c++ ×3
linux ×2
sorting ×2
algorithm ×1
android ×1
asynchronous ×1
bash ×1
children ×1
dictionary ×1
html ×1
io ×1
iostream ×1
iterator ×1
java ×1
javascript ×1
mergesort ×1
methods ×1
networking ×1
oop ×1
pimpl-idiom ×1
python ×1
scripting ×1
signals ×1
stl ×1
stream ×1
string ×1
styles ×1
textview ×1
unicode ×1
views ×1