小编moo*_*eep的帖子

每个派生类的静态变量

可能重复:
子类化时覆盖静态变量

我有一组类都是从基类派生的.这些派生类中的任何一个都声明了相同的静态变量.然而,它对每个派生类都是特定的.

请考虑以下代码.

class Base {
    // TODO: somehow declare a "virtual" static variable here?
    bool foo(int y) { 
        return x > y; // error: ‘x’ was not declared in this scope
    }
};

class A : public Base {
    static int x;
};

class B : public Base {
    static int x;
};

class C : public Base {
    static int x;
};

int A::x = 1;
int B::x = 3;
int C::x = 5;

int main() {} …
Run Code Online (Sandbox Code Playgroud)

c++ oop static

11
推荐指数
2
解决办法
7872
查看次数

malloc和calloc分配的内存块布局的差异?

calloc分配num每个大小的内存块size:

void * calloc ( size_t num, size_t size );

为内存中的数组分配空间为 num个元素的数组分配一个内存块,每个元素的大小都是字节长,并将其所有位初始化为零.

相反,malloc分配一个大小的内存块size:

void * malloc ( size_t size );

分配内存块 分配一个大小为字节的内存块,返回指向块开头的指针.


两者之间是否有任何区别(零初始化除外calloc)?

calloc究竟是什么意思是num内存块,因为实际上返回的内存区域也是连续的.

我认为必须有一些区别,否则为这些方法定义两个不同的接口没有多大意义?

c

10
推荐指数
1
解决办法
1973
查看次数

python位置args和关键字args

我正在阅读mercurial的源代码,并在commands.py中找到了这样的函数def:

def import_(ui, repo, patch1=None, *patches, **opts):
    ...
Run Code Online (Sandbox Code Playgroud)

在python中,postional args必须放在关键字args之前.但这里patch1是一个关键字参数,后跟一个位置参数*patches.为什么这样好?

python function func

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

QPlainTextEdit按行截断历史记录

我有一个GUI应用程序,其主要部分是QPlainTextEdit.它用于显示应用程序的日志,因此关联的文本无线逐行增长.

由于应用程序要运行很长时间,我需要限制将为此日志分配的内存.因此,我希望有一些maxNumLinesmaxNumCharacters参数可以确保在到达时将截断历史记录,即在添加新行时(即日志旋转)将删除头行.

为实现这一目标,我发现了这些功能

// get the associated text
QString toPlainText () const

// set the associated text
void setPlainText ( const QString & text )
Run Code Online (Sandbox Code Playgroud)

因此,像这个未经测试的代码可能会做的伎俩:

QString &tmp = pte.toPlainText();
while (tmp.size() > maxNumCharacters) {
  // remove lines from the head of the string until the desired size is reached
  // removes nothing if "\n" could not be found
  tmp.remove(0, tmp.indexOf("\n")+1);
}
pte.setPlainText( tmp );
Run Code Online (Sandbox Code Playgroud)

这是从第一行中删除第一行的方法QPlainTextEdit吗?是否有其他Qt Text GUI元素可以更好地适应这个任务(设置最大行数并在列表的头部截断),例如以某种方式显示QStringList我可以存储行(st我可以轻松地 …

logging qt qplaintextedit log-rotation

9
推荐指数
2
解决办法
4679
查看次数

范围查询的数据结构

我最近被问到关于以下问题的编码问题.我有一些解决这个问题的方法,但我不确定这些问题是否最有效.


问题:

编写程序来跟踪文本范围集.起点和终点将是字符串.

Text range example : [AbA-Ef]
 Aa would fall before this range
 AB would fall inside this range
 etc.
Run Code Online (Sandbox Code Playgroud)

字符串比较就像'A'<'a'<'B'<'b'...'Z'<'z'

我们需要支持此范围内的以下操作

  • 添加范围 - 如果适用,这应合并范围
  • 删除范围 - 这将从跟踪的范围中删除范围并重新计算范围
  • 查询范围 - 给定一个字符,函数应该返回它是否是任何跟踪范围的一部分.

请注意,跟踪范围可以是不连续的.


我的解决方案

我提出了两种方法.

  1. 将范围存储为双向链表或
  2. 将范围存储为某种平衡树,叶节点具有实际数据,并且它们作为链表相互连接.

您认为这个解决方案是否足够好,或者您可以考虑采用更好的方法来实现这三个API,从而提供最佳性能?

algorithm data-structures

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

成员函数范围变量

请考虑以下代码:

#include <iostream>

struct X {
    int foo() {
        // Can I get this to be an instance-specific static variable, please?
        static int i = 0;
        return i++;
    }
};

int main() {
    X a, b;
    std::cout << a.foo() << ' ';
    std::cout << b.foo() << ' ';
    std::cout << b.foo() << '\n';
    // output is: 0 1 2
    // desired output: 0 0 1
}
Run Code Online (Sandbox Code Playgroud)

是否有可能i为每个实例获取此静态变量的副本,X而无需将声明和初始化移动到一些远距离的标头和构造函数?

我想要这个的原因是因为这个变量的值只与这个特定的函数有关(但也特定于它的成员函数的实例),例如,最后调用参数,最后调用的时间等.

支持这个想法的类已经有点大了,传播声明和在单个函数中使用的这些微小变量的初始化变得越来越难看.

更新:请注意,我不想泄漏内存.当一个实例被销毁时,也应该删除与它相关的变量.

Update²:显然(并且不幸的是)确实没有具有这种确切语义的正确语言功能.虽然有一些变通方法,但每个变通方法都会引入限制和陷阱

  • 放置"功能"声明和定义
  • 访问其他"真实"成员变量
  • 重载派生类中的"函数" …

c++ static scope

9
推荐指数
2
解决办法
546
查看次数

如何测试登录过程?

我正在使用Django 1.6开发一个Web应用程序,我要求用户使用我的登录表单登录.我想编写一个测试用例来测试登录用户的过程.

我确实成功获得了一个工作登录页面,这意味着我能够登录.以下步骤解释了我的设置.但是,为此过程编写测试用例确实失败了.在这一点上,我既不能在测试中发现错误,也不确定这种方法是否有意义.有人能帮我吗?

更新:在此期间我注意到,我的表单错误消息太不明确了.该问题似乎是由表单字段验证步骤失败的空表单字段引起的.当我将错误添加{{ form.errors }}到模板时,响应包含以下内容(格式不太好):

<ul class="errorlist">
  <li>username
    <ul class="errorlist">
      <li>This field is required.</li>
    </ul>
  </li>
  <li>password
    <ul class="errorlist">
      <li>This field is required.</li>
    </ul>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我仍然不确定如何最合理地测试这个程序.我是Django的新手,也是它测试框架的哲学.可能是,这个问题不直接落入Django测试框架的范围,在这个框架中,模型,视图和表单(看似)是相互分离的(看似)?这个测试是否属于独立测试套件进行黑盒/功能测试的领域,例如,使用Selenium?


我开始是这样的:

  1. 开始了一个新项目,如下所示:

    django-admin.py startproject login_test
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加了一个条目login_test/urls.py,像这样:

    urlpatterns = patterns('',
        url(r'^login/$', 'django.contrib.auth.views.login'),
        url(r'^admin/', include(admin.site.urls)),
    )
    
    Run Code Online (Sandbox Code Playgroud)
  3. 制作模板/home/moooeeeep/login_test/templates/registration/login.html,如下:

    {% if form.errors %}
    <p>Your username and password didn't match. Please try again.</p>
    {% endif %}
    {% if not user.is_active %}
    <form method="post" action="{% url 'django.contrib.auth.views.login' %}">
      {% csrf_token %} …
    Run Code Online (Sandbox Code Playgroud)

django validation django-forms django-authentication django-testing

9
推荐指数
2
解决办法
9470
查看次数

门在无限墙算法

题:

墙上的门 你正面向一个两个方向无限延伸的墙.墙上有一扇门,但你既不知道多远,也不知道哪个方向.只有当你就在它旁边时才能看到门.设计一种算法,通过步行最多O(n)步骤到达门,其中n是您的初始位置和门之间的步数(未知).

书中答案:

这里的关键思想是每次从初始位置指数地离开时左右走路.一个简单的实现这个想法的是做,直到达到门以下内容:对于i = 0,1,...,使2 步到右边,返回到初始位置,使2 步到左侧,并再次回到初始位置.让2 (K-1) <N≤2 ķ.此算法找到门所需的步数可在上面估算如下:

一些数学

因此,算法所做的步骤数量为O(n).(注意:用更好的算法改善乘法常数并不困难.

我迷路的地方:

当它达到总和时,我迷路了.有人可以向我解释这笔钱的工作原理吗?就像为什么他们将2 k和2 i乘以4和3?为什么他们将它与<7·2 k进行比较?它是如何等于14·2 (k-1),与<14n相比较.我想我得到的事实是n = 2 (k-1)这可以解释总和的最后一个但是有很多问题.

algorithm

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

格式化日期为星期几

我有一张桌子,其中包括日期栏servdate.

我使用以下查询来获取过去一周内的所有工作(一周从星期一开始):

SELECT * FROM tb1 WHERE servdate BETWEEN date('now', 'Weekday 1', '-21 days') AND date('now')
Run Code Online (Sandbox Code Playgroud)

我希望查询工作完全相同,而是将servdate字段作为一周中相应的日期返回.例如,"星期一",而不是"2010-11-28".

这可能吗?

sql database sqlite

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

在为自己的类使用with语句时需要注意哪些事项?

我打算使用方便语句为我的一个Python类实现类似C++的构造函数/析构函数.到目前为止,我只是针对文件IO来讨论这个问题,但我认为这对基于连接的通信任务也很有帮助,比如套接字数据库连接.最终需要关闭的事情.

在PEP 343(上面链接)这是说,这with需要方法__enter____exit__,和我的直观的实现的,这似乎是为了工作.

class MyConnection:
  def __init__(self):
    pass
  def __enter__(self):
    print "constructor"
    # TODO: open connections and stuff
    # make the connection available in the with-block
    return self 
  def __exit__(self, *args):
    print "destructor"
    # TODO: close connections and stuff

with MyConnection() as c:
  # TODO: do something with c
  pass
Run Code Online (Sandbox Code Playgroud)

产生输出(如预期):

constructor
destructor
Run Code Online (Sandbox Code Playgroud)

真的应该这么容易吗?除此之外还有什么要考虑的事情?为什么这么多库(显然)缺少这个功能呢?我错过了什么吗?

python with-statement

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