C++
文章平均质量分 75
无
cmiao-me
变得更强(ง˃̀ꄃ˂́)۶
展开
-
MSVC中常见的几种函数调用约定
MSVC中几种常用的函数调用约定1. calling convention1.1 cdecl参数从右向左压入堆栈调用方清理堆栈名称修饰:函数名加前缀_1.2 stdcall参数从右向左压入堆栈被调用方清理堆栈名称修饰:函数名前缀加_,后缀@,之后接参数列表字节数1.3 fastcall前两个小于等于DWORD的参数通过ECX, EDX寄存器传递,其他参数从右向左依次压入堆栈被调用方清理堆栈名称修饰:函数名前缀加@,后缀@,之后接参数列表字节数2. prologue a原创 2022-04-15 16:09:41 · 1015 阅读 · 0 评论 -
动态链接库的创建和使用
动态链接库的创建和使用一. 创建动态链接库1. 创建动态链接库项目1. 1 动态链接库(DLL)项目结构如下为了节约大型项目的编译时间,系统自动为我们生成了和预编译头相关两个文件pch.cpp和pch.h,我们可以选择保留或者是删除他们。如果决定保留则需要在项目中每个源文件的最前面加入#include "pch.h",否则无法通过编译。如果删除了他们,同时还需要到项目属性中禁用预编译头,具体方法如下:dllmain.cpp定义了动态库的入口,当系统开始或终止一个进程或线程的时候,会调用每个原创 2021-03-14 20:58:50 · 2112 阅读 · 0 评论 -
结构体的内存布局
结构体的内存布局为了提高内存访问效率,降低处理器从内存读取数据的开支,各种数据类型的对象并不是连续存放在内存中的任意起始地址上的,而是尽可能的对齐到机器字长上面。编译器出于优化的考虑,会给各种数据类型的变量在内存的存储方式施加限制,我们可以从两个方面来考虑这个问题,一个是对齐(alignment),另一个就是间距(padding)。1. 对齐各个变量在内存中的起始地址能够被变量所属类型的宽度所整除。比如说占据2个字节的 short 类型的地址应该是偶数,占据4个字节的 int 和 float 应该放到原创 2020-05-28 10:46:04 · 1244 阅读 · 0 评论 -
C语言通过变量控制输出精度的两种方法
有的时候需要通过用户输入的变量来控制数据的输出宽度,总结了一下,大概有两种办法:1.直接使用转换说明符 *我们都知道可以通过%m.n来控制数据的输出范围,这里要求m和n都是字面量类似地,标准库也提供了通过变量来控制宽度的方法,这时我们就要使用%*.*。当使用*的时候要求通过一个int类型的参数来指定宽度,如果参数是正数则输出右对齐,如果参数是负数则输出内容左对齐,相当于添加了一个-标签。例子...原创 2020-03-02 22:32:19 · 7289 阅读 · 0 评论 -
随机迷宫生成与寻路算法(3)深度优先搜索
通过深度优先搜索求解迷宫在上一篇文章中我们实现了基于深度优先搜索(DFS)的随机迷宫生成。方法类似,我们也可以利用DFS来进行随机迷宫寻路,也就是我们这一次文章的实现目标。我们将尝试通过深度优先搜索来求解上一篇文章中生成的随机迷宫,稍有不同的是这次我们通过栈和迭代代替上次使用的函数递归调用,这两种方法理论上来分析是等价的。该方法很容易理解:首先我们将迷宫的起始点入栈将栈顶元素标记为当前...原创 2020-03-02 19:03:01 · 632 阅读 · 1 评论 -
随机迷宫生成与寻路算法(2)深度优先搜索
迷宫生成算法(2)深度优先搜索由于上次的实现中存在着一些问题,因此这次还是使用深度优先搜索,改掉下面这几个问题:显示迷宫时,直接输出数字0和1显得不够直观。递归部分的解释不够严谨,实现也很混乱,这次着重重写了这一部分。实践表明迷宫的尺寸只能是奇数,如果是偶数会出现一行或者一列遍历不到,因此我们检查用户输入,对输入的偶数直接加1。除了这些之外,还修改了一下迷宫类的定义,把和坐标有关的成...原创 2020-03-01 19:50:33 · 586 阅读 · 0 评论 -
随机迷宫生成与寻路算法(1)深度优先搜索
迷宫生成算法(1)深度优先搜索接下来一段时间,想要研究下随机迷宫生成算法,打算在有空可时候偶尔更新一下这方面的学习过程。随机迷宫的生成算法有很多种,比如递归回溯,递归分割,随机Prime等等。今天是第一次尝试随机迷宫生成,就先试一下用递归的方法通过深度优先搜索来生成随机迷宫。首先我们来明确一下基本观念,迷宫可以通过一个二维数组来表示,二维数组中的元素就表示存在于迷宫中的位置,他们可能是可以行走...原创 2020-03-01 01:08:19 · 1602 阅读 · 0 评论 -
C++ Primer习题解答 Chapter12
12-30要实现的功能:从文件读入文本,并保存以用于查找给读入的文本建立一个从单词到其出现的全部行号的映射读取用户输入的单词,查找该单词是否出现过,如果出现过打印出所在行和行号根据上面列出来的基本需求,决定应该使用哪些数据结构:首先我们需要一个容器来保存从文件中读取的文本,考虑到查找是以行为单位进行的,因此文本逐行保存,我们不妨用一个vector<string>来保...原创 2020-02-28 18:36:18 · 135 阅读 · 0 评论 -
C++ Primer习题解答 Chapter11
11-3#include<iostream>#include<vector>#include<string>#include<cctype>#include<iterator>#include<stdexcept>#include<map>#include<cctype>#includ...原创 2020-02-26 23:26:12 · 318 阅读 · 0 评论 -
C++ Primer习题解答 Chapter10
10-1#include<iostream>#include<vector>#include<string>#include<cctype>#include<iterator>#include<stdexcept>#include<algorithm>#include<fstream>...原创 2020-02-24 23:22:10 · 362 阅读 · 0 评论 -
通过C++求解中缀表达式
中缀表达式求值1.概述:在C++ Primer(5th)的第九章顺序容器中出现了下面一道习题:作为栈适配器的练习,这个题目看上去很复杂(emmmm。。。刚开始看了好几遍都没太懂题目要干什么)。有些疑惑地我又看了看对应的英文版,意思完全不一样好不好。。。现在这个题目就很简单了,就是通过栈把被左右圆括号括起来的内容替换掉,没有什么太多需要注意的地方,实现代码如下:#include<...原创 2020-02-23 14:21:34 · 1098 阅读 · 0 评论 -
C++ Primer习题解答 Chapter9
9-5#include<iostream>#include<vector>#include<string>#include<cctype>#include<iterator>#include<stdexcept>using namespace std;vector<int>::iterator ...原创 2020-02-22 17:05:30 · 152 阅读 · 0 评论 -
初始化list容器时遇到的错误
初始化list<char*>遇到的错误记录一个今天写C++遇到的一个错误,代码是这样的:list<char *> list = { "hello", "world" };vector<string> v;v.assign(list.begin(), list.end());编写过程中做的类型检查并没有提示任何错误,一眼看过去也没什么问题,但是并不能通...原创 2020-02-21 23:59:16 · 1467 阅读 · 1 评论 -
C++ Primer习题解答 Chapter8
8-1#include<iostream>#include<vector>#include<string>#include<cctype>#include<iterator>#include<stdexcept>using namespace std;istream& readStream(istr...原创 2020-02-21 15:25:10 · 160 阅读 · 0 评论 -
C++ Primer习题解答 Chapter7
本章习题大多相互承接,最终实现一个比较完整地类,鉴于这样的特点,这里不再贴出每一个练习的代码,而是挑选几个类列出其最终实现:1.Sales_data类//Sales_data.h#include<string>using namespace std;class Sales_data;//友元函数的类外声明istream& read(istream &i...原创 2020-02-20 20:14:30 · 145 阅读 · 0 评论 -
C++ Primer习题解答 Chapter6
6-3#include<iostream>//#include<vector>//#include<string>//#include<cctype>//#include<iterator>//#include<stdexcept>using namespace std;int fact(int d);...原创 2020-02-18 21:52:50 · 174 阅读 · 0 评论 -
遍历二维数组的三类方法(C++)
遍历二维数组的三种方式1.下标法for (int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { cout << array[i][j]<<'\t'; } cout << endl;}2.指针法for (int(*prow)[column] = arra...原创 2020-02-18 00:15:24 · 3057 阅读 · 0 评论 -
C++ Primer习题解答 Chapter 5
5-5#include<iostream>#include<string>using namespace std;int main(){ string table[] = { "F", "D", "C", "B", "A", "A++"}; int grade; string level; cout << "please input your...原创 2020-02-17 19:30:30 · 460 阅读 · 0 评论 -
C++ Primer习题解答 Chapter 4
4-21#include<iostream>#include<vector>using namespace std;int main(){ vector<int> vint; const int sz = 100; cout << "原向量:" << endl; for (int i = 0; i < sz; i...原创 2020-02-16 20:11:53 · 99 阅读 · 0 评论 -
C++ Primer习题解答 Chapter 3
3-2#include<iostream>#include<string>using namespace std;int main(){ int option; while (cout<<"1 读入整行\n2 读入单词\n", cin >> option) { if (option == 1) { string s; ...原创 2020-02-15 20:16:20 · 461 阅读 · 0 评论 -
C++ Primer习题解答 Chapter 2
2-1(1)short, int, long, long long 的区别:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-07JKbSR7-1581597379848)(img/2/1.png)]并且标准还要求这些类型满足:1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(...原创 2020-02-13 20:37:10 · 258 阅读 · 0 评论 -
C++ Primer习题解答 Chapter 1
1-2int main(){ //main返回值用来指示状态,0表示成功,其他由系统定义,通常表示错误 return -1; }1-3#include<iostream>int main(){ std::cout << "Hello, World!" << std::endl;}1-4#include<iostream>...原创 2020-02-12 22:58:35 · 108 阅读 · 0 评论