小编Jun*_*jie的帖子

关于PyQt示例程序

我目前需要一个项目的GUI库.我熟悉python,发现PyQt可能是个不错的选择.

我正在阅读有关PyQt的教程,并对以下示例程序感到困惑

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
ZetCode PyQt4 tutorial 

In this example, we draw text in Russian azbuka.

author: Jan Bodnar
website: zetcode.com 
last edited: September 2011
"""

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):      

        self.text = u'\u041b\u0435\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\
\u0435\u0432\u0438\u0447 \u0422\u043e\u043b\u0441\u0442\u043e\u0439: \n\
\u0410\u043d\u043d\u0430 \u041a\u0430\u0440\u0435\u043d\u0438\u043d\u0430'

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('Draw text')
        self.show()

    def paintEvent(self, event):

        qp = QtGui.QPainter()
        qp.begin(self)
        self.drawText(event, qp)
        qp.end()

    def drawText(self, event, …
Run Code Online (Sandbox Code Playgroud)

python qt pyqt

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

关于C++虚拟继承的问题

以下代码来自"Inside the C++ object model"一书

#include <iostream>  
using namespace std;
class X{};
class Y: public virtual X{};
class Z: public virtual X{};
class A: public Y, public Z{};

int main()
{
     cout<<sizeof(X)<<" "<<sizeof(Y)<<" "<<sizeof(Z)<<" "<<sizeof(A)<<endl;
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的电脑(Windows,VS2010)中,输出为:

1 4 4 8

这是我的问题

1,sizeof(X)= 1

该书说当X类型生成两个实例时,比如说xa和xb.编译在A中插入一个字节,以便xa和xb可以有不同的地址.我不太明白原因.

2,sizeof(Y)= 4

通过使用虚拟继承,我们还有一个额外的虚拟指针吗?我想这可能与多态中的虚拟指针不同.任何人都可以给我Y的内存布局吗?

谢谢!

c++ virtual inheritance

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

从其子序列的集合中构建最短的字符串

给定一个字符串的子序列集合.

例如:

abc
acd
bcd
Run Code Online (Sandbox Code Playgroud)

问题是,如何从这些序列中确定最短的字符串?

对于上面的例子,最短的字符串是abcd.

这里子序列表示字符串的一部分但不一定是连续的.喜欢acd是字符串的子序列abcd.

编辑:这个问题实际上来自Project Euler问题79,在那个问题中,我们有50个子序列,每个子序列的长度为3.所有字符都是数字.

string algorithm

5
推荐指数
1
解决办法
1290
查看次数

方案中的尾递归Pascal三角形

我最近开始阅读SICP,并且对将递归过程转换为尾递归形式非常感兴趣。

对于“一维”情况(线性情况),例如斐波那契数列或阶乘计算,进行转换并不难。

例如,正如书中所述,我们可以按以下方式重写斐波纳契计算

(define (fib n)
    (fib-iter 1 0 n))
(define (fib-iter a b count)
    (if (= count 0) 
        b 
        (fib-iter (+ a b) a (- count 1))))
Run Code Online (Sandbox Code Playgroud)

而且这种形式显然是尾递归的

但是,对于“二维”情况,例如计算Pascal三角形(SICP中的Ex 1.12),我们仍然可以轻松编写如下的递归解

(define (pascal x y) 
  (cond ((or (<= x 0) (<= y 0) (< x y )) 0)
        ((or (= 1 y) (= x y) ) 1)
        (else (+ (pascal (- x 1) y) (pascal (- x 1) (- y 1))))))
Run Code Online (Sandbox Code Playgroud)

问题是,如何将其转换为尾递归形式?

recursion scheme tail-recursion sicp pascals-triangle

5
推荐指数
1
解决办法
4688
查看次数

通过ostream输出C数组

我正在尝试使用iostream输出C数组.

对于int的数组,我写了这样的代码

template <size_t N>
ostream& operator<< (ostream& os, const int (&x)[N])
{
    for(int i=0; i<N; i++)
        os<<x[i]<<",";
    return os;
}
int main()
{
    int arr[]={1,2,3};
    cout<<arr<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好.

然后,我将它推广到更多类型(如字符,浮点数等),所以我更新原始版本如下

template <class T, size_t N>
ostream& operator<< (ostream& os, const T (&x)[N])
{
    for(int i=0; i<N; i++)
        os<<x[i]<<",";
    return os;
}
Run Code Online (Sandbox Code Playgroud)

主要功能没有改变,但是,这次,当我编译它时,发生了错误.

In function `std::ostream& operator<<(std::ostream&, const T (&)[N]) [with T = int, long unsigned int N = 3ul]':
a.cpp:15:   instantiated from here
a.cpp:9: error: ambiguous overload for …
Run Code Online (Sandbox Code Playgroud)

c++ arrays iostream

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