C++中的静态绑定与动态绑定
什么是绑定? 绑定就是对函数调用和函数定义的映射。 静态绑定(static binding) 静态绑定发生在编译期,因此也被称为early binding。编译器(或链接器)直接关联内存地址和函数调用。 对普通的函数调用默认采用静态绑定,函数...
广泛应用的算法
为了向其他领域的人展示算法的重要性,用一个列表记录已经广泛地部署在商业、政府的软硬件设施上的算法。 Preface Algorithms that are the main driver behind a system are, in my opinion, easier to find in non-algorithm...
自动微分到可微编程—综述
自动微分(Automatic Differentiation,AD),科学计算,物理建模/图形渲染,人工智能。 程序求导的基本方法 导数的定义是通过极限的概念对函数进行局部的线性逼近。 常见的基本函数在数学上有对应的导函数,复合函数也有对应的...
右值和移动语义
值类别 参考资料 1. 03 | 右值和移动究竟解决了什么问题? - 现代C++实战30讲 - 吴咏炜 2. lvalues, rvalues, glvalues, prvalues, xvalues, help! – C++ on a Friday (knatten.org)
踩坑std::vector<bool>
缘由 同事的程序中是C/C++与Fortran混用,有很多地方使用动态内存,似乎有内存泄漏,一时也没有发现问题所在。 不过说到不如直接用容器包起来传给Fortran内核。就试了试使用std::vector<bool>,然后编译都没有通过。大概包括这...
Swap分区不足
同事在VirtualBox虚拟机中编译链接程序,最后链接过程中,报出标题这样的错误信息。 没有见过这样的错误信息,在网上查了下。大概能够确定是虚拟内存空间不足导致此链接错误,是内存不够用了,增加内存应该可以解决问题。这里通...
自己实现C++的智能指针
作用域 C++中,RAII依托栈和析构函数,管理内存资源。 因此,在类的析构函数中释放申请的资源即可。离开作用域时,即使在作用域中出现异常,编译器也会自动调用析构函数。 模板化 template<typename T> class smart_ptr { publ...
Fortran打印变量地址
在Fortran中打印出变量的地址,借助loc()获得地址,通过格式化输出设置,输出十六进制大写地址。 主程序用C语言编写,对比Fortran打印出的地址。 // main.c #include <stdio.h> void fprint_(int* x); void cprint(int* x) { p...
OJ常见输入格式
序号 输入数据类型 行数 每行数据数 数据分隔符 1 整型数 unknown 2 space 2 首行 2 space 3 末行数据均为0 2 space 4 末行为0 行首 space 5 首行 行首 space 6 unknown 行首 space 7 unknown unknown space 8 字符串 1 首行 s...
C++/Fortran调用.exe可执行文件
软件环境 # 操作系统 = Windows10 # 编译链工具 = # gcc, g++, GNU Fortran (MinGW.org GCC Build-2) 9.2.0 # GNU Make 3.82.90 Built for i686-pc-mingw32 # GNU ld (GNU Binutils) 2.32 # CMake version 3.18.1 本机安装了Mi...
使用dlopen加载动态库
概述 通过使用dlopen接口可以实现运行时的动态库函数调用,需要知道动态库中的函数原型。 以下实现Linux C/C++使用dlopen的基本示例,并说明链接选项-rdynamic的作用,提供动态加载可执行文件的示例。 接口 dlopen(), dlsym(),...
Linux动态库调用
动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要比使用静态库程序的体积小,并且使用动态库的程序在运行时必须依赖所使用的动态库文件,而...
VirtualBox虚拟机CentOS7磁盘扩容
虚拟系统磁盘文件扩充 命令操作 命令行运行VBoxManage,modifyhd扩容需要文件格式为.vdi,如为.vmdk,需要使用clonehd指定格式进行格式转换,详细可参考【1】。 VBoxManage modifyhd "centos-01.vdi" --resize 20480 GUI操作 关...
替换程序中的特定函数
问题描述 修改或替换现有程序中的实现函数是一种非常常见的需求,尤其是,在不能得到源码的情况下应该如何解决这一问题? 这里我们将问题描述为我们有main程序代码,会调用文件A中的函数A,函数A会调用文件B中的函数B(两文件中...
C++ 回顾
基础语法 变量 变量定义 1. auto 5; auto 2.0f; 由编译器根据上下文确定数据类型。 2. int *ptr = new int; int *array = new int[10]; delete ptr; delete[] array; 指针变量的动态生成与删除。 new/delete是运算符,C++11包含...
Makefile示例
示例 任务名:前提条件 步骤 # Makefile example # all: main test main: main.cpp student.cpp g++ -o main main.cpp student.cpp test: student.cpp student_test.cpp g++ -o test student.cpp student_test.cpp clean: rm -...
在容器中存放不同类型的变量
问题在于C++不是动态类型的语言,如何在运行时确定存储类型,参考知乎上的一些回答,了解到直接可以使用C++17支持的std::any/std::variant来进行对未知类型的存储。其它的一些方法基本会通过union来实现一个结构支持不同的类型...
树的遍历
N叉树的遍历 前序 递归版 对于N叉树的前序遍历,首先读取数值,然后从左向右依次对所有孩子结点进行递归调用。 class Solution { public: void rec(Node* root, vector<int>& vpre){ if(!root) return; vpre.emplace_back(root...
Basic things
变量交换 三变量法 t = a; a = b; b = t; 加减法 a = a + b; b = a - b; a = a - b; 异或法 a ^= b ^= a ^= b; C语言... 在这部分内容的学习中,首先熟悉C语言,具体地说是C99,虽然有出现的C11,但新的特性没有太多影响(C11移...