小编Ark*_*nez的帖子

Pimpl成语与Pure虚拟类接口

我想知道什么会让程序员选择Pimpl习语或纯虚拟类和继承.

我知道pimpl习惯用于为每个公共方法和对象创建开销提供一个明确的额外间接.

另一方面,Pure虚拟类带有继承实现的隐式间接(vtable),我理解没有对象创建开销.
编辑:但如果你从外面创建对象,你需要一个工厂

是什么让纯虚拟类比pimpl成语更不可取?

c++ abstract-class pimpl-idiom

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

合并排序的空间要求

我正在尝试了解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).

sorting algorithm mergesort

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

从istream到ostream的快速控制复制

我必须将几个字节从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版本,如果可行的话.

如何将这些副本限制为给定的字节数?

c++ iterator iostream stream

15
推荐指数
1
解决办法
8242
查看次数

克隆textview以将其附加到ViewGroup

我有一个用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)

但它没有用.

java android views textview

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

当信号到来时,杀死bash脚本前景子节点

我在一个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,所以任何避免这种情况的方法也应该解决我的问题.

有关如何解决这个问题的任何提示?

linux bash scripting children signals

12
推荐指数
1
解决办法
6036
查看次数

IE7 contentEditable自动换行

我有以下代码:

<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的代码,你就会明白我的意思.使浏览器窗口足够小,以便您查看文本的包装方式.

谢谢.

html internet-explorer contenteditable internet-explorer-7

11
推荐指数
1
解决办法
2903
查看次数

在Javascript中强制执行私有方法是个好主意吗?

我正与一位开发人员讨论是否有意识地侵入javascript私有函数.

替代方案是:

  1. 具有所有函数的构造函数和原型,非API方法(私有)将使用下划线命名,_function_name以便开发人员知道他们可以调用什么以及他们不能调用什么.
  2. API函数的构造函数和原型,以及作为私有命名空间内的私有函数的自由函数,除了这一个之外,它们将其隐藏在其他命名空间中.

我们不考虑其他方法,比如在表单的构造函数中创建私有函数,var private_var= function(){}因为每次对象实例化时都会触发所有这些函数的创建,并且每个对象都有自己的集合.

我们为他们提供的理由:

1

  • Javascript本身不支持私有函数,事实上,没有私有/受保护/公共可见性的概念,所以这基本上是一个hack
  • 在方法名称中使用下划线清楚地标记了给定类/原型的边界,不需要"强制"它,事实上像Python这样的语言没有私有方法,python用户似乎从不关心它从使用下划线
  • 即使私有被强制执行,它在一种语言中有什么意义,你可以动态地替换公共方法?
  • 影响可读性,相当多,私有函数被分成另一组括号,它们的范围,它们不能使用this或者它们需要被调用function.call(object)或者function.apply(object)

2

  • 通过封装远离类/原型用户手的私有方法带来明显的限制
  • 它或多或少是行业标准,许多javascript开发人员都是这样使用它的

我们怀疑,因为很多开发人员使用它,可能还有其他原因,比如性能等,就像这样使用.

由于我们对Javascript的了解非常有限,我们决定在stackoverflow中发布这个,以了解哪种方法更好,为什么.

javascript oop methods styles

11
推荐指数
1
解决办法
1433
查看次数

在输出和销毁之前按值对std :: map进行排序

我知道地图不准备排序.它针对快速和随机密钥访问进行了大量优化,实际上并不支持std::sort.

我目前的问题是我已经完整了map<std::string,int>,我将不再使用了.我只需要按value(int)顺序提取10对并销毁它.

如果可能的话,最好的方法是将它排序到位,然后迭代10次,但这显然不是解决方案.

我正在尝试使用不同的解决方案multimap<int,string>(允许重复键),但我想知道是否有更优雅的解决方案,使用stl算法和posible一样多.

编辑:

我正在使用地图,因为在99%的时间里,我需要它作为地图:快速键查找以增加值.当我不再需要地图时,只需要一个好的方法稍后提取值顺序.

目前的做法应该是:

  • std::copymap(std::string,int)一个vector(pair(std::string,int))
  • 对矢量进行排序
  • 得到前10个值
  • 摧毁矢量和地图

c++ sorting dictionary stl

10
推荐指数
2
解决办法
2万
查看次数

使用非IO事件中断epoll_wait,无信号

目前的情况是epoll_wait超过几个fds和一个可能的传入消息队列,我想在epoll_wait下面的循环在IO事件或新消息上执行.
我知道的方式:

  • 使用timemsec超时并在循环中检查队列的第一件事
  • 当消息可用时,使用队列代码中的自管道技巧
  • 使用标准信号中断系统调用
  • 使用epoll_pwait并优化前一点

上面发布的所有观点都不足以满足我的要求,我想知道是否还有其他方法我没有找到.
原因是:

  • 信号是多线程代码要避免的,并且不是很可靠
  • 超时一个消除了epoll的部分好处,只有事件醒来
  • 自管技巧目前看来是最好的方法,但仍然是太多的样板

想法?

linux io networking asynchronous

9
推荐指数
1
解决办法
4739
查看次数

unicode字符串上的Python,len和切片

我正在处理一种情况,我需要在屏幕中的分配间隙中设置一个字符串,因为我正在使用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)

python string unicode

9
推荐指数
1
解决办法
6973
查看次数