- 博客(36)
- 资源 (1)
- 收藏
- 关注
原创 实现一个简单的vector容器
当然还有好多没实现,列如二维的数组,里面会用到可变模板参数当然有空就改进下,自己实现的迭代器还有容器MyVector.h#pragma once#ifndef MYVECTOR#define MYVECTOR#include <algorithm>template<class T>class MyVector;template<class T>class MyIterator;template <class T>class MyVe
2020-08-03 18:51:57 434
原创 实现一个简单stack 栈
有段时间没更新了 最近想把STL的容器都实现一遍来提升自己写轮子的能力MyStack.h#pragma once#ifndef MYSTACK#define MYSTACK#include <iostream>#include <string>typedef unsigned int uint;template<class T>class MyStack { T* ptr; uint capacity; uint len;public:
2020-07-30 12:16:40 305
原创 c++智能指针详解
指针一直都是c\c++头疼的东西,虽然方便,但是能不用动态内存分配就不用,因为你new 多了后在释放后程序中就会有很多碎片,而且释放已经引用会使用不规范会导致程序崩溃C++后面其实有很多东西都是从很老版本的boost库引入进来了,比如functional智能指针等等 智能指针就是采用了RAII思想下期再讲因为raw指针经常会导致内存泄漏,非法内存访问,多次释放同一块内存,释放非法动态内存等问题C++通过模板提供了更加方便的对raw指针包装的智能指针,作为对象 他使用上类似raw指针可以避免raw指
2020-07-21 17:47:50 579
原创 c++ 网络通讯之Socket TCP以及vs不能用老函数的问题
网络编程 是什么呢 其实我们是按照固定逻辑去写代码的网络编程他已经存在了一段时间了 我们都是按照别人规定的协议去写代码的这些都是大佬规定好了的 我们都是用同一种方式去沟通,可以把语言看成协议互联网又是啥互联网就是不同地方的电脑通过协议连接在一起 互相发送数据也可以理解端到端的通讯这里分两个架构CS 架构 BS架构C Client 指的是客户端S Server 指的是服务器B 指的浏览器比如多个手机首先手机发给基站(通讯塔,服务器)然后服务器然后再发给另外一部手机每一个手机都
2020-07-21 16:44:57 444
原创 c++ function和bind
为什么要用std::function 因为 函数指针,函数对象,匿名函数都可以作为调用对象 即高阶函数调用对象然而并不是所有函数都可以被高阶函数调用因此要用function 列如类function 可以创建对象 他可以接受任意类型可以调用对象 而且还可以用数组存储一个函数容器 但是函数参数格式必须一样std::bind 是一个函数适配器 他接收一个函数和一组实参 返回一个function函数对象using namespace std::placeholders; // bind如果不想过早传递参数可
2020-07-19 12:06:10 761
原创 c++ functional之回调函数
**什么是回调函数函数指针主要作用其他函数的参数 这个其他函数就是<高阶函数>作为参数的函数指针指向的函数就是所谓的回调函数 向高阶函数传递不同的函数指针高阶函数中就调用不同的 回调函数 从而执行不同的处理功能**#include <iostream>#include <vector>using namespace std;template<typename T>T find_optimal(const vector<T>arr,
2020-07-19 11:54:54 778
原创 c++ functional之匿名函数捕获子句
匿名函数是一个非常方便的函数,他可以不需要函数的名字自己被函数指针,或被当成参数传递给高阶函数调用,或者直接输出#include <iostream>#include <vector>using namespace std;// Lambda 表达式 类似于函数 但不需要函数名 因此成为匿名函数int accumulate(vector<int>arr, int n, int(*fun)(int)) { int sum{ 0 }; for (int i
2020-07-19 11:45:53 1049 1
原创 c++ functional之函数对象
上期讲了函数指针这一期讲函数对象,就是通过对象去重载()运算符去调用让高级函数去调用不同的函数#include <iostream>#include <vector>using namespace std;// 因为le(x,y)形式 类似于函数调用 以此le成为函数对象 其实就是一个类的普通对象而已template<typename T>class LessThan {public: bool operator()(T a, T b)const { r
2020-07-19 11:31:49 534
原创 c++ functional之函数指针
#include <iostream>using namespace std;using AVE_PTR = double(*)(const double*, const int); // 给函数指针取别名typedef double(*AGE)(const double*, const int);// using 和typedef 都给了double(*)(const double*, const int); 都是一样的但是typedef不能用于函数模板的指针类型double ave
2020-07-19 11:18:12 632
原创 Qt 小画板
菜单栏的功能都实现了,如果想添加工具栏可以用函数封装代码放行使用mainWindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QApplication>#include <QMenu>#include <QAction>#include <QMenuBar>#include <QDebug>#include
2020-07-14 20:53:54 685
原创 Qt 小时钟
widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>class Widget : public QWidget{ Q_OBJECTpublic: Widget(QWidget *parent = nullptr); ~Widget(); void CalcPosition();protected: void timerEvent(QTimerEvent *event) o.
2020-07-14 20:46:54 931
原创 Qt 简易学生管理系统实现增删改查排序io流等等
ui像素感人代码放行使用mainWindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QApplication>#include <QTableWidget>#include <QSplitter>#include <QDialog>#include <QFormLayout>#include <Q
2020-07-13 23:48:03 1439
原创 用c++ 的可变模板参数递归来表达 著名的斐波那契数列
#include <iostream>//constexpr int fibonacci() { //constexpr 是使得表达式在编译期间就进行计算,从而避免了运行期间的计算开销 通常用于常量表达式// return fibonacci<n - 1>() + fibonacci < n - 2>(); 这个也是著名的斐波那契数列//} 没用constexpr if ////template<> // 模板专门化//constexpr in
2020-07-11 23:28:29 719
原创 c++ 模板函数调用优先级问题
#include <iostream>using namespace std;template<typename W> // template 是定义模板 <typename T> 模板类型可以自定义 T就是别名W Max(W a, W b){ //和普通函数一样可以重载 T 是返回类型 (T a,T b)函数参数 下面的参数类型都可以自定义 return a > b ? a : b;}template<> // <>没
2020-07-11 23:19:38 1007
原创 c++ 的模板类声明基本用法
#include <iostream>using namespace std;template<typename T> // template 是声明模板 <typename T> 是类型 也可以写成<class T> 都是一样的class Vector {public: // 普通类的构造函数都是 类名() 但是模板类就必须Vector<type>()了 explicit Vector<T>(int cap = 5); //
2020-07-11 23:15:05 2043
原创 Qt QTreeWidget树桩控件路径文件流小实例
直接上代码了 资源文件的图片都是我截的、widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QTreeWidget> // 树控件#include <QTreeWidgetItem> // 树的子节点#include <QSplitter> // 分割器#include <QTextEdit>#include <QHBoxLayout&g.
2020-07-11 22:56:50 484 2
原创 这是一个类似魔塔的控制台c++小游戏
这个也是以前写的 写到商人那边买武器哪里不知道咋写了然后第三关的boos 也是这样里面有两种模式,也用了多线程提速1.是手动模式,2.是自动模式 这个是深度寻路算法手动模式第一关手动模式第二关Maze.h#pragma once#pragma once#include <iostream>#include <vector>#include <stack>#include <conio.h>#include <Windows
2020-07-03 16:46:02 556 1
原创 猜牌小游戏
这是大一的时用C写的猜牌小游戏 里面用了easyx图形库运行效果#include<stdio.h>#include<time.h>#include<stdlib.h>#include<Windows.h>#include<graphics.h>#include<mmsystem.h> #pragma comment(lib,"winmm.lib")#define HANG 4#define LIE 4#def
2020-07-03 15:37:43 452
原创 Qt简易计算器实现复数运算绘图等等
太久没更新博客了前段时间弄了个计算器实现了加减乘除复数 带记忆 绘图计算二维图形等功能先简单讲解下我代码的分块用图片描述虽然画的丑实现效果图片 代码放心使用转载请通知1.Ui2.在Maindow 类实现计算maindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include "push.h"#include <QMainWindow>#include <QTableWidget>#include &l
2020-06-30 15:35:13 1793 2
原创 c++类的+-都是用运算符重载完成的
关于重载运算符很多模板类都会用到可以重载很多运算符如-,+,*,/,[],(),new,<<,>> ,!,==,<=,>=,!=,++,–等等好多还有转换运算符大部分内容都有注释下列是重载比较运算符#include <iostream>#include <utility> //模板using namespace std::rel_ops; //如果已经定义了重载< 和 == 模板类会自动生成针对类型的重载运算符如果>=c
2020-06-06 21:09:34 247
原创 c++的类 基类指针数组与虚析构函数(九)
虚析构函数 就是 向派生类传递的析构结构虚函数 是从顶部向下传递虚析构函数是从底部向上传递的基类是顶层#include <iostream>#include <string>using namespace std;class A{public: A() = default; A(string s) :s{ s }{} virtual ~A(){ cout << "析构函数A\n"; } // 虚析构函数向下传递 virtual void pri
2020-06-06 20:51:45 460
原创 c++ 的类 纯虚函数和抽象类(八)
函数体 = 0 的虚函数成为纯虚函数,如果一个类里面有纯虚函数就是抽象类必须要在派生类实现纯虚函数才能有派生类的体,也就是对象引用#include <iostream>using namespace std;struct Vector2{ double x, y;};class Shape{public: //Vector2 Position(){ return x; } virtual void draw() = 0; // 纯虚函数 不知道怎么实现的需要在派生类实现的函数
2020-06-02 23:50:14 193
原创 c++的类 虚函数和多态和dynamic_cast 转换(七)
只要在基类中用关键是virtual 声明了虚函数,派生类中这个同名虚函数加不加virtaul 关键字 这个函数都是虚函数派生类跟基类重名的函数或成员只需要在基类 成员函数前面加上virtual 虚函数关键字*那么 用基类指针去引用或指向,派生类对象都可以调用派生类同 名成员函数 如果派生类想转基类就必须强制转换 T &s = a p = &a**dynamic_cast<type *>§;或<type&> "这里的type是类型"引用它的主要作用是
2020-05-31 23:00:39 324
转载 揭秘Qt5.14 windeployqt 工具一大神坑
今天我在网上找了一天关于发布的问题首先打开Qt自带的工具有很多人都犯过一个错,版本选错的问题,我选的是32-bit的你是不是也和我一样 出现了这个问题 他说没有插件怎么解决呢,然后我在博客上找到了另一篇他说Qt 5.14 版本的bug 更新5.14.1就可以发布了 我搞一天竟然是Qt的bug一直以为是我的操作问题换个版本就可以了Qt新版本都不是很稳定注意了...
2020-05-31 22:46:19 1300
原创 c++的类 虚基类(六)
什么是虚基类就是他的派生类有两个或者以上的派生类通过虚继承,这样就可以避免派生类有多个基类的副本从而减少内存消耗关于继承可以看我的这一篇添加链接描述#include <iostream>#include <string>using namespace std;class Person{ string name{ "noname" };};class PartyMember :virtual Person{ //虚继承 普通是继承public Person p
2020-05-28 21:33:38 158
原创 C++的类 派生类与基类指针(五)
#include <iostream>class B{ int b{ 0 };public: B(int b = 0) :b(b){} void print(){ std::cout << "B:" << b<<std::endl; }};class D :public B{ double d{ 2.5 };public: D(double d = 0) :d(d){} //调用派生类构造函数时先会调用基类默认构造函数 b是0 voi
2020-05-27 20:27:41 306
原创 c++的类派生类的构造函数(四)
派生类的构造函数构造会先调用基类的默认构造函数,然后在调用派生类的构造函数派生类的析构函数则相反 先调用派生类的析构函数在调用基类的构造函数派生类构造函数 自底向上,析构函数 自上向底如果要派生类构造函数想调用重载的基类构造函数那么就必须 D(): B(参数){} 拷贝构造函数关于继承可以看我的这一篇添加链接描述#include <iostream>#include <string>using namespace std;class B{ int b{ 0 };
2020-05-27 20:25:33 231
原创 c++的类派生继承(三)
下列是继承方法详解class A{}class B:A{ //此方法是默认的继承方法 私有继承 class B:private A}struct C:A{ // 用struct 定义一个派生类 如果没指名方法 默认的是 struct C:public A}private // 私有继承 不管采用哪种继承方式,基类私有成员 在派生类中都是不可访问的protected:成员// 如果是 private 继承的方式,则在派生类中是private 成员// 如果是protected继承方式,
2020-05-24 20:48:16 211
原创 c++的类(二)构造函数
小编学完c++给你们分享下笔记Date() = default; //default 默认构造函数Date() = delete; //delete 禁用构造函数 禁止拷贝 赋值运算符 delete[] a动态分配删除explicit Date(); // 就是禁止含隐调用隐式转换friend void print();// friend是友元 在类中声明 函数或外部类的友元 可以在外部直接访问这个类的 私有或保护成员函数mutable int a //a是mutable 成员变量 是可以被修改的
2020-05-23 22:37:33 167
原创 c++ 的类 (一)
小编学完c++给你们分享下笔记什么是类就是一个封装了多个函数,功能,以及那些成员在C语言中都是直接在main或者其他函数中定义变量或者在外部定义全局变量类里面又分public 公共的所以都可以调用private 私有的只有本类可以调用,还有友元函数或者类friendprotected 受保护的成员或函数,都是通过派生给子类用的后面我将会讲到this 就是本类的成员可以通过this->去访问本类的成员函数&this 就是取调用的地址成员Date() = default; //de
2020-05-23 22:32:45 153
原创 c++ 函数以及入栈出栈和const以及引用&取地址
**const int a = 0; //定义时必须赋初值 也不能用其他变量修改 还有普通变量不能引用 const对象const int * c = &a; //指针可以修改 等价int * const cconst int const b = &a;//const int const 不能被修改而且只能取a小编还有其他知识列如类void f(int x, int &y){ // x只能拷贝了p y是引用了pl 所以x 会被销毁 y是引用不会被销毁 x++; y++
2020-05-23 22:30:04 420
原创 Qt c++的核心机制信号与槽
学完Qt的核心机制 信号与槽的总结如下:你要使用signal(信号)和slot(槽) 必须是QObject的派生类,或者继承QObject这个类而且在派生类中必须声明Q_OBJECT不然用connect会说对接错误 它必须放在公共或私有成员当中保护就不清楚了QObject::connect(&a,SIGNAL(stateChanged(int)),&b,SLOT(Function(int)));// &a信号对象,SIGNAL(信号函数),&b槽函数对象,SLOT(槽
2020-05-13 21:40:59 244
原创 C++通信录系统
学完C++17后面的要求自己写一个io的通信录代码如下 C++17 放行使用控制台版本通讯录主要功能1.实现插入用ofstream of(“xxx”,ios::out|ios::app); 就行 其中ios::out是写入模式,ios::app是在尾部写入ios::in是以输入模式打开 ios::trunc重置文本内容,ios::binary是用二进制方式打开文件ios::ate是将文件指针偏移末尾2.查找用C字符串的指针偏移就行3.搜索不合格的电话然后加上“”用字符串的迭代器偏移用l
2020-05-12 18:57:37 212
原创 Pong 游戏控制台版
Pong 游戏控制台版我就直接上代码了欢迎来讨论#include <iostream>#include <conio.h>#include <Windows.h>#include <ctime>#include <cstdlib>using namespace std;#define WIDTH 120#define ...
2020-02-01 10:03:49 888
原创 C语言跨年小程序
C语言跨年小程序主要是利用SetConsoleCurosrPosition实现话不多说直接上代码#include #include <stdio.h>#include <stdlib.h>#include <Windows.h>#include <time.h>#include #include #include <gra...
2020-01-02 15:48:48 4421 3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人