自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 CMake之add_custom_target

在CMake中,用于定义用户target的函数,且不生成该target对应的文件。在该target中,可以执行相应的用户命令,即命令行下的shell命令,比如可以调用cmakepython和Linux下常用的终端命令行命令。其中,较为常用的为:COMMAND、DEPENDS、WORKING_DIRECTORY和COMMENT。

2023-08-30 22:02:40 329

原创 CMake之find_package

通过find_package引入开源软件的库(动态或者静态库,或者仅包含头文件的库)。CMake官方,在cmake安装路径下的/share/cmake-<version>/Modules目录中,为我们提供了许多寻找依赖包的Find<PackageName>.cmake命名的文件。具体相关模块的介绍,可以查看。注:在全量源码构建时,一般不会,也不能用cmake预定义的路径下的Find<PackageName>.cmake文件。由于Windows中,编写动态库,并使用动态库,代码书写比较麻烦。

2023-08-27 17:28:43 216

原创 CMake之install

将生成的库、可执行程序和相关接口头文件发布出去,install到固定的目录。其中,install的所有安装根目录,均是以。其中,main.cpp、add.cpp、add.h和模块目录CMakeLists.txt文件②的内容,和。config.json文件内容为空,仅仅用于示例需求。同样以之前的代码工程为例,简要介绍几种install的用法。详细的install介绍,可去。变量所表示的目录作为根目录。

2023-08-27 17:28:00 391

原创 CMake之CMake常用变量说明

CMAKE_SOURCE_DIR:整个CMake工程最顶层的CMakeLists.txt文件所在路径。CMAKE_CURRENT_SOURCE_DIR:当前CMakeLists.txt文件所在路径。CMAKE_CURRENT_LIST_DIR:当前*.cmake文件所在路径。CMAKE_BINARY_DIR: 构建目录的顶层路径。CMAKE_CURRENT_BINARY_DIR:构建当前CMakeLists.txt文件所在路径。CMAKE_INSTALL_PREFIX:执行make instal

2023-08-27 17:27:25 319

原创 CMake之头文件target

有时我们的代码功能都在头文件中实现,比如C++中的模板类及相关的成员函数定义或者简单的工具类函数。一般的library都是包含源文件(.cpp、.c)文件,因此我们要使用到。没有源文件,就将该target声明为interface,并指定该target的头文件所在路径为CMakeLists.txt所在的路径。的INTERFACE功能。main.cpp文件,与。

2023-08-27 17:26:40 114

原创 CMake之多target

一个工程中,一般包含多个target库,和一个可执行程序target。

2023-08-27 17:25:57 397

原创 多文件单target

在平常写C++工程代码时,不止一个源文件,而是多个源文件和头文件组成。在此节中,借助简单的C++代码,简要介绍CMake单Target的场景。

2023-08-27 17:25:05 44

原创 CMake之Hello

使用CMake基于CMakeLists.txt文件生成为hello.cpp构建的Makefile文件,并基于此Makefile文件,构建生成相应的可执行程序。笔者当前仅使用了win10,因此以win10作为构建时的操作系统。建议:工具下载时,复制链接,使用迅雷工具下载,速度会更快。此时,已经在build目录下生成。

2023-08-27 17:23:55 48

原创 win10+WSL+Ubuntu环境搭建

查找路径:搜索"WSL"->搜索结果选择"Install WSL"->选择"Manual installation steps for older versions"章节的"Downloading distributions"小节]。此处,提供不在应用商店下载的网址,请查看。注:确定版本后,复制相应版本链接,推荐使用迅雷下载,相比浏览器直接下载,简直天壤之别。这一步骤,网上有很多介绍,此处不做一一介绍。执行解压后的ubuntu.exe文件,就可进入Ubuntu系统。将下载完成的文件,增加。

2023-08-27 16:34:39 196

原创 C++内存使用统计工具(Valgrind之massif)

如果读者使用的是Windows+WSL2的场景,那么就需要安装支持远程桌面和图形化界面的软件包。原因:vector容器,在存储数据时,内存空间不足,则需要申请当前内存的2倍空间,并将数据拷贝到新的内存空间中。应用程序运行一段时间后,内存确实在增长,使用valgrind的memcheck工具检测出来,确实没有出现。问题:从上述程序来看,存储了255个4字节的数据,占用空间约1KB的内存,为何占用了1.5KB的内存呢?结论:10240个4字节的元素,刚好为40KB的内存空间,与预期相符。

2023-08-27 16:29:04 1212

原创 C++内存泄漏检测工具(Valgrind之memcheck)

内存泄漏检测

2023-08-27 16:22:29 322

原创 Python之旅——类的继承属性搜索规则

类的继承属性搜索规则基于LEGB搜索规则,并根据类的继承关系树,自底向上,自左向右搜索,直到找到第一个属性为止。(如果未找到,抛出异常)图片来自:《Learning Python 5th Edition》一书Figure 26-1例如:C1继承C2和C3两个类,那么C1类的对象I1对某个属性的访问,搜索路径I1.name : I1;I1.x : I1->C1;I1.y : I1->C1;I1.z : I1->C1->C2;I1.w : I1-

2021-05-09 23:01:49 164

原创 Python之旅——类相关变量

类相关变量类变量类的变量,类所在的模块被加载时,初始化类变量及其所引用的对象。类变量引用可变类型1.修改可变类型对象成员类方式class Demo(object): a = [1, 2, 3] # list为可变类型if __name__ == "__main__": demo1 = Demo() Demo.a[1] = 88 # 类方式修改对象成员 demo2 = Demo() print("demo1.a=", demo1.

2021-04-18 11:37:39 103 2

原创 Python之旅——模块加载

模块加载模块加载时,主要完成以下动作:在当前模块中加载由import yy或者from xx import yy导入的未被其他模块导入过的模块;对模块中的类或者函数定义进行语法检查(ps:检查类属性和成员函数,不检查函数体),创建类定义对象和函数定义对象;执行模块中的外层语句;将类定义对象、函数定义对象和模块内的对象输出到该模块对应的二进制文件(.pyc为后缀的模块文件)。注:输出到二进制文件有以下两个好处避免模块被重复加载;多次运行程序,若模块未变化,将不再做语法检查,也不创建模块二

2021-04-12 23:50:16 260 1

原创 Python之旅——二维列表陷阱

二维列表陷阱有时候,我们会像下列方式,创建一个n*n的二维矩阵,并都初始化为0:n = 3grid = [[0] * n] * nprint(grid)代码输出:[[0, 0, 0], [0, 0, 0], [0, 0, 0]]看到我们创建的二维矩阵,并都初始化为0了。高兴的接着往下对二维矩阵执行修改操作:n = 3grid = [[0] * n] * nprint(grid)grid[1][1] = 6print(grid)代码输出:[[0, 0, 0], [0, 0,

2021-02-19 21:37:48 165

原创 Python之旅——列表扩展

列表扩展+ :将加号两边的列表进行拼接得到一个新的列表(重新分配的内存空间)+=:将+=右边的列表追加到左边的列表,原地址空间首地址保持不变listA.append(listB):将listB列表作为一个元素添加到listA列表尾(仅占用listA一个元素空间),原地址空间首地址保持不变extend等价于+=+扩展列表listA = [1, 2, 3]listB = [4, 5, 6, 7]print(listA, "addr:0x%x" % id(listA))print(list

2021-02-17 21:25:10 675 1

原创 Python之旅——字符串与列表间转换

字符串与列表间转换字符串分割成列表sentence = "Hello world!"words = sentence.split()print(type(words))print(words)代码输出:<class 'list'>['Hello', 'world!']字符串列表拼接成字符串words = ["hello", "python!"]sentence = "-".join(words)print(type(sentence))print(sentence

2021-02-16 22:01:45 124

原创 Python之旅——列表深浅拷贝

列表深浅拷贝将列表中的值,拷贝到新的容器。先思考一下,采用下列方式,是否能达到拷贝列表的目的?nums = [1, 2, 3]copied_nums = numsprint(f"nums={nums}")print(f"copied_nums={copied_nums}")代码输出:nums=[1, 2, 3]copied_nums=[1, 2, 3]上述仅仅是,将copied_nums变量与nums变量都指向了相同的列表对象。如若不信,请查看下列代码:nums = [1, 2,

2021-02-16 19:29:34 119 2

原创 Python之旅——变量赋值

变量赋值python中,变量是对象的引用。变量赋值,即将变量指向值对象,对值对象的引用。值对象的分类:不可变对象可变对象值对象为不可变对象不可变对象,通俗的讲,就是不可以改变对象的内容。比如:数字,字符串,元祖tuple。变量指向的值对象不可变,但变量的指向可变,即可以改为指向新的值对象。1. 值对象为数字a = 10b = aprint("a addr: 0x%x val: %d" % (id(a), a))print("b addr: 0x%x val: %d" % (id(

2021-01-14 00:12:00 114

原创 Python之旅——字典映射(表驱动)实现switch功能

字典映射(表驱动)实现switch功能本文介绍python中可以使用字典的方式实现和C/C++的表驱动相同的功能,并且代码更加简洁。c/c++的表驱动代码:#include <map>#include <iostream>using namespace std;void foo1(int key){ cout << "foo1:" << key << endl;}void foo2(int key){ c

2021-01-13 23:03:13 823

原创 Python之旅——函数传参

函数参数传值更多文章,请移步☞ https://gitee.com/youngzhiyong/bookPython一切皆对象!!!函数参数传值,函数形参作为对象的引用(形参指向实参对象)。a.常量对象作为函数参数常量对象是一个不可变的对象。当对形参再次赋值时,是形参变量指向一个另外的对象。def update(num): print("num_addr: 0x%x" % id(num), f"num_value:{num}") # id函数是输出对象地址 num = 5

2020-09-09 22:06:33 91

原创 python之旅——跨平台文件编码

文件编码1. python代码文件编码a. Python中的默认编码格式是ASCII格式,在未修改编码格式时,python2将无法解析中文编码。而python3可以进行正确的解析。b. 在python代码文件开头,使用下面两种方式之一标识当前代码文件的编解码(utf或UTF均可)#coding:utf-8#-\*-coding:utf-8-\*-2. 输出文本文件编码 with open("test.txt", "w") as fd: fd.write(test_str)

2020-08-23 21:11:10 145

原创 2.git——代码下载

1. 从远程个人仓库下载    git clone https://github.com/youngzhiyong/scrapy.git2. 只下载指定分支,当前以master分支为例    git clone -b master https://github.com/youngzhiyong/scrapy.git3. 下载当前分支master代码到指定目录dir_name  ...

2019-02-11 21:53:36 165

原创 1.git——代码仓库管理总视图

使用git代码管理的一般流程如上图所示,以scrapy代码为例:私有远端库中没有scrapy代码工程,从公共远端库中fork一个工程到私有远端库。若私有远端库中有scrapy工程,那么只需要从公共远端库merge到私有个人库,对代码进行更新,私有远端库和公共远端库保持一致。 本地库中没有scrapy工程,需要从私有远端库中clone一个工程到本地。本地库中有scrapy工程,更新代码与个...

2018-12-16 10:10:41 685

原创 Python之旅——带着决心出发(第10步)

一、基础篇11.类实例方法调用在类实例方法定义中,第一个参数为self,可认为是实例对象本身,类似于C++中的this指针。两种等价的调用方式:1.obj.obj_method()2.MethodCall.obj_method(obj)注:类方法和类的静态方法不支持第二种调用方式,但支持第一种调用方式。代码举例:class MethodCall: def obj_method(self): pr...

2018-06-10 23:28:37 121

原创 Python之旅——带着决心出发(第9步)

一、基础篇10. 类继承属性搜索规则规则:    根据类的继承关系树,自底向上,自左向右搜索,直到找到第一个属性为止。(如果未找到,抛出异常)图片来自:《Learning Python 5th Edition》一书Figure 26-1例如:C1继承C2和C3两个类,那么C1类的对象I1对某个属性的访问,搜索路径      I1.name : I1;      I1.x    : I1-&gt;C...

2018-06-10 22:25:22 160

原创 Python之旅——带着决心出发(第8步)

一、基础篇9. 类变量、类成员变量、类实例方法、类方法、类静态方法a.类变量 VS 类成员变量类变量:为类所有实例和类本身所共有,使用类或者实例修改类变量,将会影响其他实例类成员变量:为类实例单独拥有,即每一个类实例的成员变量不在同一地址b.类实例方法 VS 类方法 VS 类静态方法类实例方法:第一个参数必须为self,表示实例自身;可调用类方法和类静态方法(self.method)类方法:第一个...

2018-05-13 17:56:12 147 1

转载 python import自定义模块方法(转载)

转自:http://www.cnitblog.com/seeyeah/archive/2009/03/15/55440.html          https://www.cnblogs.com/master-pokemon/p/6136483.htmlpython包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。下面将具体介绍几种常用情况:(1)主程序与模块...

2018-05-04 12:01:15 918

原创 Python之旅——格式化输出

一、基础篇4. 格式化输出参数 % round formata. %格式化输出的方式和C语言中的printf中的类似。b. round是入参进行四舍五入,但可能会受到计算机能表示浮点数精度影响。c. format的格式化输出比较灵活,可以使用{}或者{n}的方式输出。d. 多参数时,%格式化输出只能按照顺序输出;format的方式,可以根据指定的参数位置进行输出。代码示例:a. print中使用%...

2018-05-04 11:52:07 224

原创 Python之旅——“a = a + b  b = a - b “    VS   “a, b = a + b, a - b“

一、基础篇3. "a = a + b b = a - b " VS "a, b = a + b, a - b"a. 二者输出结果肯定不相同。b. 第一个利用C/C++的思维进行思考即可;第二个是利用python中的元组打包和序列解包的思维思考。假设a为10,b为8,示例解析:a. a = a + b b = a - ba = 10b = 8print("Add first")a ...

2018-05-04 11:50:25 213

原创 Python之旅——else语句

一、基础篇2. Python的else语句异同点:a. if与else语句的使用和C/C++/Java等语言的使用一致;b. Python中存在循环体for/while与else的结合,而C/C++/Java中没有此用法。但类似于C/C++/Java中的if...else{throw...}(不满足if条件,else抛出异常之类的)。执行原理: for/while语句中的循环条件正常结束(包括...

2018-05-04 11:49:16 113

原创 Python之旅——全局变量&局部变量

一、基础篇1.全局变量 VS 局部变量a. 全局变量在整个文件内有效;b.局部变量在函数内有效;c.当全局变量和局部变量同名,局部变量有效。若定义了全局变量,则可在函数内直接使用全局变量。a = 1b = [23, 98]def func():print("a = ", a) #使用全局变量print("b = ", b)b[0] = 9print("b =...

2018-05-04 11:45:17 267

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除