c/c++
独舞人生
Everything should be simple
展开
-
A星(AStar)算法的实现
关于AStar的原理这里简述一下,首先有一张地图,然后准备一个open list 和 close list,open list存放所有可能的路径,但是需要注意的是这个列表是动态怎加的,也就是每走一步就把当前可能的路径都加进去,然后每次从open list中去除一个最小代价的点,最为下一步的路径,并用该点计算之后可能的路径 在加入到open list中去,然后把这个代价最小的点放到close list中,表示该点已经走过了,如此循环直到从open list取出的最小代价点为 终点,此时通过回溯找到路径;代原创 2020-08-15 12:13:47 · 6205 阅读 · 2 评论 -
C/C++实现协程API包括上下文切换
协程可以很方便在一个线程中实现多个函数间的切换执行,如果某个函数需要等待,则可以切换到其他函数,这可以很大程度提高一个线程的利用率,因此现在很流行;c++很多版本原生并没有提供协程,但是由于c++支持内联汇编,所以实现一套协程api并非难事,只要实现函数间的上下文切换,其他的就容易多了,上下文切换通常就是保存当前函数的寄存器,由于是主动切换所以需要保存的寄存器也就很少了,下面给出一种协程的实现方式:coroutine.h#ifndef M_COROUTINE_H#define M_COROUTI原创 2020-06-22 23:34:09 · 616 阅读 · 0 评论 -
使用内联汇编实现函数调用
在实现之前需要熟悉汇编和堆栈的知识才行,否则可能无法理解;首先输说一下函数的几种调用方式,常见的三种有:1.__cdecl 参数从右至左入栈 调用者清理栈(外平栈);2.__stdcall 参数从右至左入栈 自身清理堆栈(内平栈);3.__fastcall ecx和edx传送前两个参数,剩下的参数从右至左入栈 自身清理堆栈,如果参数<=两个则不用平衡堆栈,因为参数在寄存器里;在了解之后,就可以写代码了,//使用内联汇编编写函数int __fastcall add(int原创 2020-06-19 21:23:34 · 1521 阅读 · 0 评论 -
c++使用链表实现列表List
使用双向链表实现:// Project1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。///*/*#ifdef _MSC_VER#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )#endif*/#include <iostream>...原创 2020-04-05 17:16:18 · 515 阅读 · 0 评论 -
c/c++使用宏定义实现打印自动换行
直接上代码:#define print(str,...) printf(str##"\n",__VA_ARGS__)int main(){ print("adasdasd%d",10); print("adasdasd%d",10);}结果如下:原创 2019-08-12 23:52:04 · 1898 阅读 · 0 评论