![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++笔记
文章平均质量分 87
小奔Linda
这个作者很懒,什么都没留下…
展开
-
Android.mk用法详解
转发自:https://www.cnblogs.com/reality-soul/p/6893248.html一、Android.mk介绍Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握Android.mk的语法规范。它的基本格式如下:[cpp]view plaincopyprint?LOCAL_PATH:=$(callmy-dir...转载 2021-07-09 17:06:28 · 794 阅读 · 0 评论 -
二叉树详解:创建、前中后序非递归遍历、DFS、BFS、树的深度
typedef struct BiNode{ int data; struct BiNode *lChild; struct BiNode *rChild;}*BiTree;typedef struct MarkNode //保存标记信息的节点{ BiNode *node; bool tag; // true:表示节点node的左右子树已经...原创 2019-04-16 21:13:56 · 143 阅读 · 0 评论 -
利用两个栈实现一个队列的基本操作
template <typename T>class MyQueue{public: stack<T> s1; stack<T> s2;public: void push(T data); void pop(); T front(); T back(); int size(); bool empty();};template &l...原创 2019-04-17 09:59:52 · 139 阅读 · 0 评论 -
约瑟夫问题
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始循环转圈报数,每次的第M个人将退出,。例如N=6,M=5,退出圈的顺序依次是:5,4,6,2,3,1由于退圈的工作涉及到频繁的删除工作,所以选用循环单链表结构。约瑟夫问题的实现代码:// 创建一个无头节点的、有n个节点的、循环单链表node* create(int n){ if (n < 0) { return ...原创 2019-04-26 09:42:04 · 259 阅读 · 0 评论 -
用单链表实现队列
typedef struct node{ int data; node *next;}node;typedef struct queue{ node* front; node* rear;}Queue;Queue* CreateQueue() // 创建空队列{ Queue *q = new Queue; q->front = NULL; q->re...原创 2019-04-26 10:31:37 · 305 阅读 · 0 评论 -
双向链表的实现
typedef struct node{ int data; node *pre; node *next;}node;node* Create(); // 创建链表int length(node *head); // 计算链表的长度void print(node *he...原创 2019-04-26 10:32:34 · 241 阅读 · 0 评论 -
单链表的实现
typedef struct node{ int data; node *next;}node;node* Create(); // 创建单链表int length(node *head); // 计算单链表的长度void print(node *head); ...原创 2019-04-26 10:33:47 · 260 阅读 · 0 评论 -
字符串匹配:BF和KMP算法、字符串的交错匹配问题
// BF 算法 (下标都是从0开始)int BrouteForce(const char* S, const char* T){ if(S == NULL || T==NULL) { return -1; } int lenS = strlen(S); //主串的长度 int lenT = strlen(T); //模式串的长度 int i = 0; i...原创 2019-04-18 09:21:46 · 209 阅读 · 0 评论 -
字符串操作:字符串转数字;字符串连接、拷贝、比较;字符串移位包含问题
字符串转成数字需要考虑:1、输出指针是否为空2、输入的字符串第一位是否为正负号“+”“-”3、输入的字符串是否包含非数字的字符,若包含,直接返回0;4、数字若溢出,返回0; std::numeric_limits<int>::max()返回编译器允许的 int 型数 最大值#define PosNumMin 0#define NegNumMin ((sig...原创 2019-04-18 14:14:47 · 379 阅读 · 0 评论 -
New运算符详解
三种new运算符:new运算符做的三件事:获得一块内存空间、调用构造函数、返回正确的指针1、new分配内存,调用构造函数,定义如下:void* operator new(std::size_t) throw(std::bad_alloc);void operator delete(void *) throw();分配失败则抛出异常std::bad_alloc,不是返回NUL...原创 2018-11-10 11:29:53 · 15764 阅读 · 0 评论 -
友元函数
友元函数友元函数的作用就是提供直8接访问对象的私有成员的接口。友元函数是可以直接访问类的私有成员的非成员函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。形式:friend <返回类型> <函数名> (<参数列表>);然后在类体外对友元函数进行定...原创 2018-11-09 20:27:25 · 482 阅读 · 0 评论 -
C++: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。解题思路:方法一:先用空格将句子分割成单个单词并按顺序存储,然后将这些单词进行反转方法二:先将整个句子反转,然后再单词内部进行反转具体实现:方法一:基本思想:先用空格将句子分割成...原创 2018-03-31 14:30:13 · 3270 阅读 · 0 评论 -
C++:KMP算法的实现
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。示例:主串S:ababaaababc...原创 2018-04-02 20:41:06 · 4305 阅读 · 0 评论 -
C++:构造函数的初始化列表,以及初始化的顺序
构造函数的初始化值列表:对于对象的数据成员而言,初始化和赋值是有区别的。当数据成员是 const 、引用,或者属于某种未提供默认构造函数的类类型的话,就必须通过构造函数的初始值列表为这些成员提供初始值,否则就会引发错误。// 错误:ci 和 ri 必须初始化CobstRef::ConstRef(int ii){// 赋值 i = ii; ci = ii; ...原创 2018-09-15 20:18:08 · 3707 阅读 · 1 评论 -
C++: 泛型算法
泛型算法 泛型算法大多数独立于任何特定的容器,这些算法是独立的(或者称“泛型的”),他们可以用于不同类型的容器和不同类型的元素。泛型算法本身不会执行容器的操作,他们只会运行在迭代器之上,执行迭代器的操作。 泛型算法基本包含在<algorithm>和<numeric>头文件里。算法的形参模式:alg (beg, end, other args);...原创 2018-09-18 14:55:23 · 191 阅读 · 0 评论 -
C++:用class和struct关键字定义类,有什么不同?
实际上,我们可以使用 class 关键字和 struct 关键字中的任意一个定义类。唯一的一点区别就是,struct 和 class 的默认访问权限不太一样。如果使用 struct 关键字,则定义在第一个访问说明符之前的所有成员都默认是 public 的;但如果使用 class关键字,那么定义在第一个访问说明符之前的成员默认都是 private 的。...原创 2018-09-14 16:24:35 · 2857 阅读 · 0 评论 -
c++: 关联容器的使用方法
关联容器有:map、multimap、set、multisetmap的元素是pair类型、<关键字,值>对,其中关键字是const,不能修改,值可以修改。set的元素是关键字,const,只能访问、不能修改。multimap 和 multiset 都允许多个元素有相同的关键字。当用一个迭代器遍历一个 map、multimap、set、multiset 时,迭代器会按照关...原创 2018-09-25 14:16:12 · 264 阅读 · 0 评论 -
C++ : 插入迭代器,流迭代器,反向迭代器,移动迭代器的应用实例
插入迭代器:back_inserter、front_inserter、inserter流迭代器:istream_iterator(读取输入流)、ostream_iterator(读取输出流)反向迭代器:rbegin()、rend()、crbegin()、crend() 应用实例:#include<iostream>#include<algorithm>...原创 2018-09-20 14:50:47 · 350 阅读 · 0 评论 -
浅谈new/delete和malloc/free的用法与区别
浅谈new/delete和malloc/free的用法与区别目录一.new和delete用法 二.malloc和free的用法 三.new和malloc的区别 正文 每个程序在执行时都会占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为自由存储区或堆。回到顶部一.new和delete用法 如下几行代码:int *pi=new int...转载 2018-10-24 10:13:13 · 156 阅读 · 0 评论 -
CRT函数
在VS中,编写C++项目如果使用了 scanf 、strcpy等不安全函数时,编译时会出错。这是因为后来的VS使用了更加安全的 run-time library routines 。新的Security CRT functions(就是那些带有“_s”后缀的函数),具体可以参考:《CRT函数的安全增强的版本》下面给出这个问题的解决方案:方法一:将原来的旧函数替换成新的 Security...原创 2018-11-09 19:25:39 · 1077 阅读 · 1 评论 -
C++:单链表逆置的递归算法和非递归算法
struct LinkNode { int m_data; LinkNode *m_pNext;};LinkNode* re_list(LinkNode *node, LinkNode *next) //递归{ if (next != NULL) { LinkNode *he...原创 2018-03-22 22:59:48 · 1314 阅读 · 0 评论