![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 51
向阳花开_
搬砖码农一枚,希望能更上一层楼~
展开
-
C++-点到点、点到线、共线等常用计算
C++常用数学计算1. 一点到另外两点组成直线的距离2.获取平面两点间的距离3计算两个向量的夹角4. 判断三点共线1. 一点到另外两点组成直线的距离已知点p /p1/p2,求p到p1 p2的距离根据点到直线的距离公式:d = (Ax0 + By0 + C) / sqrt(A * A + B * B)A = y2 - y1B = x1 - x2;C = x2 * y1 - x1 * y2;程序实现//定义Point2f结构体 struct Point2f{ float x; floa原创 2021-12-11 14:52:41 · 2465 阅读 · 0 评论 -
C++ 类型转换(static_cast/ dynamic_cast/ reinterpret_cast)
C语言是强制转换,没有进行类型检查,存在不安全问题C++ 中提供的数据转换方式如下:static_cast 一般的转换,内嵌类型(int char…)也可以具有继承关系的指针和引用(必须要有继承关系)dynamic_cast 主要在基类和派生类之间进行转换const_cast 主要针对const,reinterpret_cast 用于进行没有任何关联之间的转换,如一个字符指针转换为一个整型数,任何类型指针都可以,指针 引用1.static_caststatic_cast 用于基础数据原创 2021-04-25 22:08:04 · 223 阅读 · 0 评论 -
C++ 多线程之条件变量
使用条件变量condition_variable 进行程序的休眠与唤醒notify_onenotify_all程序示例#include <condition_variable>#include <deque>#include <fstream>#include <functional>#include <iostream>#include <mutex>#include <string>#include原创 2021-04-14 23:10:46 · 226 阅读 · 0 评论 -
C++ 类模板之类外实现重载运算符和友元函数
在同一个CPP中,使用友元函数,同时在类外实现程序如下:#include <iostream>using namespace std;//在类外进行前置声明// 友元函数在类外面实现,并且都在同一个CPP文件中,//需要在前面对类和对应操作符重载函数进行前置声明。// 同时在类内部声明的对应函数需要在参数链表前加入 "<T>"。template <class T1, class T2> class Person;template <class原创 2021-04-11 10:45:13 · 2163 阅读 · 1 评论 -
C++ ---类模板和函数模板
目录1.类模版2.函数模板1.类模版示例:#include <iostream>namespace ClassTempalteTest {//类模板template <class T> class Person {public: Person(T id, T age) { this->mAge_ = age; this->mId_ = id; } void showPerson() { std::cout <&l原创 2021-04-07 23:01:58 · 145 阅读 · 0 评论 -
C++ 解决报错error: no matching function for call to ‘min(float, double)’
在使用std::min()函数时,编译遇到如下报错: error: no matching function for call to ‘min(float, double)’ c z = std::min(fabs(alpha), 0.4);经查资料发现是由于两个数据类型不同造成的,std::min函数类型如下template< class T > const T& min( const T& a, const T& b );在使用时,旭原创 2021-01-28 09:59:59 · 18040 阅读 · 1 评论 -
C++ 设计模式之工厂模式
目录1.简单工厂模式1.1 什么是简单工厂模式1.2 模式中包含的角色及其职责1.3 简单工厂模式的优缺点1.4 程序示例2.工厂模式2.1 什么是工厂模式2.2 类图角色和职责2.3 工厂方法模式和简单工厂模式比较2.4 程序示例3.抽象工厂1.简单工厂模式1.1 什么是简单工厂模式简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。1.2 模式中包含的角色及其职责1)工厂(Creator)角色简单工厂模式的核心原创 2021-01-03 19:20:41 · 283 阅读 · 1 评论 -
C++--设计模式之单例模式
目录一级目录二级目录三级目录1.单例模式介绍2.懒汉模式3.饿汉模式4.多线程+单例模式5.静态成员函数及变量扩展说明一级目录二级目录三级目录1.单例模式介绍单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。即:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法结构图:为什么要使用单例模式?在应用系统开发中,我们常常有以下需求:在多个线程之间,比如初始化一次socket资源;共享原创 2021-01-03 15:13:38 · 284 阅读 · 0 评论 -
C++使用杂记
记录C++ 编程过程中遇到的一些问题及笔记1.智能指针智能指针的使用好处:(1)自动释放内存(2)方便使用STL容器shared_ptr与unique_ptr智能指针与常规指针的重要区别是它负责自动释放所指向的对象,两种智能指针的区别在于管理底层指针的方式:shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指向的对象。标准库还定义了一个名为week_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。原创 2020-12-20 20:19:33 · 146 阅读 · 0 评论 -
C++--主要排序算法(冒泡,选择,插入等)
文章目录1.冒泡排序2.选择排序3.插入排序完整测试代码:1.冒泡排序原理:1.比较相邻的元素,若前一个比后一个大,就交换这两个元素位置;2.对每一个相邻元素做同样的操作,从开始第一对元素到结尾的最后一对元素。最终最后的元素就是最大的;时间复杂度:O(n^2),空间复杂度: O(1)int* BubbleSort(int arr[], int n){ //循环控制趟数,找N-1趟 for (int i = n-1; i > 0; i--) { fo原创 2020-09-06 17:13:37 · 172 阅读 · 0 评论 -
C++ --两个坐标系的相互转换
坐标系转换原创 2020-04-17 20:24:09 · 2812 阅读 · 0 评论 -
动态规划--斐波那契数列
斐波那契数列按照递归法和非递归法求解:// Algorithm Test.cpp : 动态规划测试//#include <iostream>using namespace std;//Fibonacci sequence 斐波那契数列namespace FibonacciTest { / //递归方法 int Rec_FibSequence(...原创 2020-02-25 16:36:37 · 283 阅读 · 0 评论 -
C++--STL之常用算法
常用遍历算法find、find_if、adijacent_find、binary_search、count、count_if、tranform、1.findfind(first, end, value);返回区间[first,end)中第一个值等于value的元素位置;若未找到,返回end。函数返回的是迭代器或指针,即位置信息。void test02(){ vector<...原创 2020-02-23 13:12:15 · 182 阅读 · 0 评论 -
C++ --STL容器之map/multimap使用及案例实现
-容器之map/multimap原创 2020-02-22 20:52:08 · 576 阅读 · 0 评论 -
C++--STL绑定适配器使用(not1/not2、bind1st/bind2nd、pre_fun、mem_fun /mem_fun_ref)
一.bind1st/bind2nd使用1.bind1st/bind2nd介绍 绑定适配器 将一个二元函数对象转变成一元函数对象 bind1st bind2nd区别? bind1st,将元素绑定为函数对象的第一个参数 bind2nd,将元素绑定为函数对象的第二个参数2.程序测试测试用例:将容器中每个元素都加上一个特定值,如200namespace FunctionalTest ...原创 2020-02-22 17:08:25 · 932 阅读 · 1 评论 -
C++-- 函数对象(仿函数)
1.函数对象如果一个类将()运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象。函数对象是一个对象,但是使用的形式看起来像函数调用,实际上也执行了函数调用,因而得名。函数对象可以像普通函数一样调用函数对象可以像普通函数那样接收参数函数对象超出了函数的概念,函数对象可以保存函数调用的状态2.程序测试#define _CRT_SECURE_NO_WARNINGS#...原创 2020-02-20 19:28:00 · 348 阅读 · 0 评论 -
C++ --容器之浅拷贝与深拷贝
一 浅拷贝浅拷贝不开辟新空间,只增加一个指针,指向原有的内存。程序测试#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <vector>using namespace std;class Person {public: //构造函数; Person(const char* name,...转载 2020-02-19 12:38:14 · 1232 阅读 · 0 评论 -
C++ --容器之set/multiset
一. set特性set/multiset 中的所有与元素会根据元素值自动进行排序。set是以RB-tree(红黑树,平衡二叉树的一种)为底层机制,查找效率高。set容器中不允许重复元素,multiset中允许重复元素。二. set常用操作1. set构造函数set<T>; st //set默认构造函数multiset<T> mst; //multise...原创 2020-02-17 13:22:18 · 195 阅读 · 0 评论 -
C++ --容器之List (链表)
一. List特性特性总结:采用动态存储分配,不会造成内存浪费和溢出;链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素;链表灵活,但是空间和时间额外耗费巨大。二. list常用操作1. list构造函数list<T> lst; //采用模板类实现,对象的默认构造形式;list<beg, end>; //构造函数将[beg, end...原创 2020-02-16 23:06:23 · 484 阅读 · 0 评论 -
C++ --容器之queue(队列)
一. queue的特性队列是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。二. queue常用操作1.queue 构造函数queue<T> que; //采用模板实现,queue对象的默认构造形式;queue...原创 2020-02-16 20:28:35 · 501 阅读 · 0 评论 -
C++ --容器之stack
一. Stack特性Stack是一种先进后出的数据结构(First in last out,FILO),它只有一个出口,stack只允许在栈顶新增加元素,移除元素,获得栈顶元素。除了顶端外,其他地方不允许获取元素,即只有栈顶元素可以被外界使用。栈不支持遍历,不支持随机存取,只能通过top从栈顶获取和删除元素。二. Stack常用操作1. stack构造函数stack<T>...原创 2020-02-16 13:37:50 · 396 阅读 · 0 评论 -
C++ --容器之deque
一.deque特性器操作示意图二.deque常用操作1. deque构造函数2. deque赋值操作3. deque大小操作4. deque双端插入和删除5. deque数据存取6. deque插入操作三. 程序测试#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <deq...原创 2020-02-16 12:10:39 · 357 阅读 · 0 评论 -
C++ --- string常用操作
1. String 与char*的区别:string是一个类,char是一个指针string 封装了char,管理该字符串,是个char*的容器string封装了很多实用的方法如:查找,拷贝,删除,替换,插入等string不需要考虑内存释放和越界问题2. String和char*的转换:string转charstring str = "deffre";//注意:这里要加上 c...原创 2020-02-15 20:15:37 · 275 阅读 · 0 评论 -
C++ --容器之Vector
一.Vector特性当Vector插入新元素时,若空间不足,vector会申请更大一块内存空间,将原空间数据拷贝到新空间,释放旧空间数据,再把新元素插入新申请的空间二.常用操作1. vector 默认构造2. Vector常用赋值操作3. Vector大小操作4. Vector数据存取操作5. Vector插入和删除数据三.程序测试原创 2020-01-04 16:49:06 · 236 阅读 · 0 评论 -
两个超大整数相加
用字符串处理数值运算总体思想:按照小学算术运算计算,按位运算从数组最高位,一个个的取出来相加(当然的先把单个字符转换为整型),记住进位,循环计算 需要做的事情: (1)判断输入的字符串是否为数字(特别要考虑小数点,如果做除法,被除数不能为0) (2)比较2个字符串长度大小,对长度小的字符串左边补0 面试题1:如果系统要使用超大整数(超过long的范围),请你设计一个数据结构来存储这种原创 2017-09-17 16:35:40 · 3041 阅读 · 0 评论 -
C++ -- 角度范围转换
角度与弧度间转换#define PI 3.1415926//弧度转角度#define r2a(x) ((x)*180/PI)//角度转弧度#define a2r(x) ((x)*PI/180)将角度转换到[0,360)之间的角度double range_angle_360(double angle){ while (angle > 360) angl...原创 2019-11-13 11:20:19 · 3931 阅读 · 2 评论 -
CMakeList笔记
对CMakeList的一些写法的说明,这里记录一下。cmake_minimum_required(VERSION 2.8.3) # # CMake 最低版本要求,低于该版本构建过程会被终止project(test) ##定义工程名称### # 指定编译器# CMAKE_C_FLAGS_DEBUG ---- C 编译器# CMAKE_CXX_FLAGS_D...原创 2019-11-11 09:31:44 · 266 阅读 · 0 评论