我目前需要一个项目的GUI库.我熟悉python,发现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) 以下代码来自"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的内存布局吗?
谢谢!
给定一个字符串的子序列集合.
例如:
abc
acd
bcd
Run Code Online (Sandbox Code Playgroud)
问题是,如何从这些序列中确定最短的字符串?
对于上面的例子,最短的字符串是abcd.
这里子序列表示字符串的一部分但不一定是连续的.喜欢acd是字符串的子序列abcd.
编辑:这个问题实际上来自Project Euler问题79,在那个问题中,我们有50个子序列,每个子序列的长度为3.所有字符都是数字.
我最近开始阅读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)
问题是,如何将其转换为尾递归形式?
我正在尝试使用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)