VS 2022 C++ 自定义头文件示例

2023-05-16

前言:

博主最近刚从VS Code转到VS 2022,但发现自定义的方法和VS Code有些不同,故出一期VS 2022自定义头文件的博客,时间仓促,请不吝赐教

如何联系我?wei.haoran@outlook.com

正文:

参考资料:Microsoft C++、C 和汇编程序文档

以"lnode.h"为例,您需要保证在头文件和源文件内均创建名为"lnode"的头文件和源文件;

lnode.h示例:

#pragma once
#include <iostream>
#include <vector>

const int MaxSize = 1e3 + 10;
typedef int ElemType;

typedef struct LNode
{
    ElemType data;
    struct LNode* next;
} LNode;

void CreateLNodeRear(LNode*& L, ElemType a[], int n);
void InitLNode(LNode*& L);
void DestroyLNode(LNode*& L);
bool IfEmpty(LNode* L);
int LNodeLen(LNode* L);
void DisplayLNode(LNode* L);
bool GetElem(LNode* L, int i, ElemType& e);
int LocateElem(LNode* L, ElemType e);
bool InsertLNode(LNode*& L, int i, ElemType e);
bool DeleteLNode(LNode*& L, int i, ElemType& e);

显然,函数的声明,类的定义,结构体的定义都写在头文件内;

注意,using namespace std 最好不要写在头文件内。

推荐阅读:[C++] 头文件中不要用using namespace std

lnode.cpp示例:

#include <iostream>
#include <vector>
#include"lnode.h"

using namespace std;
void CreateLNodeRear(LNode*& L, ElemType a[], int n)
{
    LNode* s, * rear;
    L = (LNode*)malloc(sizeof(LNode));
    rear = L;
    for (int i = 0; i < n; i++)
    {
        s = (LNode*)malloc(sizeof(LNode));
        s->data = a[i];
        rear->next = s;
        rear = s;
    }
    rear->next = NULL;
}

void InitLNode(LNode*& L)
{
    L = (LNode*)malloc(sizeof(LNode));
    L->next = NULL;
}

void DestroyLNode(LNode*& L)
{
    LNode* pre = L, * p = L->next;
    while (p != NULL)
    {
        free(pre);
        pre = p;
        p = pre->next;
    }
    free(pre);
}

bool IfEmpty(LNode* L)
{
    return (L->next == NULL);
}

int LNodeLen(LNode* L)
{
    LNode* p = L->next;
    int cnt = 0;
    while (p != NULL)
    {
        cnt++;
        p = p->next;
    }
    return cnt;
}

void DisplayLNode(LNode* L)
{
    LNode* p = L->next;
    while (p != NULL)
    {
        cout << p->data << " ";
        p = p->next;
    }
    cout << endl;
}

bool GetElem(LNode* L, int i, ElemType& e)
{
    LNode* s = L; // s指向头结点,j置0;
    int j = 0;

    if (i <= 0)
        return false;
    while (j < i && s != NULL)
    {
        j++;
        s = s->next;
    }
    if (s == NULL)
        return false;
    else
    {
        e = s->data;
        return true;
    }
}

int LocateElem(LNode* L, ElemType e)
{
    LNode* s = L->next;
    int j = 1; //数据结点指向首结点,j置为1(表明此时位置指向1)
    while (s != NULL && s->data != e)
    {
        s = s->next;
        j++;
    }
    if (s == NULL)
        return (0);
    else
    {
        return (j);
    }
}

bool InsertLNode(LNode*& L, int i, ElemType e)
{
    LNode* p = L, * s;
    int j = 0;

    if (i <= 0)
        return false;

    while (j < i - 1 && p != NULL)
    {
        j++;
        p = p->next;
    }

    if (p == NULL)
        return false;
    else
    {
        s = (LNode*)malloc(sizeof(LNode));
        s->data = e;
        s->next = p->next;
        p->next = s;
        return true;
    }
}

bool DeleteLNode(LNode*& L, int i, ElemType& e)
{
    LNode* p = L, * q;
    int j = 0;
    if (i <= 0)
        return false;
    while (j < i - 1 && p != NULL)
    {
        j++;
        p = p->next;
    }
    if (p == NULL)
        return false;
    else
    {
        q = p->next;
        if (q == NULL)
            return false;
        e = q->data;
        p->next = p->next->next;
        free(q);
        return true;
    }
}

显然,lnode.cpp内仅包含函数的实现过程,using namespace std 和头文件;

注意,lnode.cpp内一定要包含:

#include"lnode.h"

main.cpp示例: 

#include<iostream>
#include<vector>
#include"lnode.h"

using namespace std;

int main()
{
    LNode* L = nullptr;
h1:
    cout << "1.CreateLNodeRear;2.InitLNode;3.DestroyLNode;4.IfEmpty;5.DisplayLNode;" << endl;
    cout << "6.GetElem;7.LocateElem;8.InsertLNode;9.DeleteLNode;10.LNodeLen" << endl;

    int flag = 0;
    cin >> flag;

    if (flag == 1)
    {
        ElemType num;
        vector<ElemType> array;
        cout << "请输入待输入数组array,空格间隔,回车结束" << endl;
        while (1)
        {
            cin >> num;
            array.push_back(num);
            if (cin.get() == '\n')
                break;
        }
        int len = array.size();
        int a[MaxSize];
        for (int i = 0; i < len; i++)
            a[i] = array[i];
        CreateLNodeRear(L, a, len);
    }
    else if (flag == 2)
    {
        InitLNode(L);
    }
    else if (flag == 3)
    {
        DestroyLNode(L);
    }
    else if (flag == 4)
    {
        if (IfEmpty(L))
            cout << "Empty" << endl;
        else
            cout << "Not Empty" << endl;
    }
    else if (flag == 5)
    {
        DisplayLNode(L);
    }
    else if (flag == 6)
    {
        int i = 0, e = 0;
        cout << "请输入i的值" << endl;
        cin >> i;
        if (GetElem(L, i, e))
            cout << e << endl;
        else
            cout << "error!" << endl;
    }
    else if (flag == 7)
    {
        int e;
        cout << "请输入待查找的e" << endl;
        cin >> e;
        if (LocateElem(L, e) == 0)
            cout << "error!" << endl;
        else
            cout << LocateElem(L, e) << endl;
    }
    else if (flag == 8)
    {
        int i = 0, e = 0;
        cout << "请输入i的值" << endl;
        cin >> i;
        cout << "请输入e的值" << endl;
        cin >> e;
        InsertLNode(L, i, e);
    }
    else if (flag == 9)
    {
        int i = 0, e = 0;
        cout << "请输入i的值" << endl;
        cin >> i;
        if (!DeleteLNode(L, i, e))
            cout << "error!" << endl;
        else
            cout << "Finished." << endl;
    }
    else if (flag == 10)
    {
        cout << LNodeLen(L) << endl;
    }
    else
    {
        cout << "未识别指令" << endl;
    }

    cout << "是否继续?Y/N" << endl;
    char c;
    cin >> c;
    if (c == 'Y')
        goto h1;
    else
        return 0;
}

显然,main.cpp内亦要包含:

#include"lnode.h"

可以把”lnode.h“想成从main.cpp函数中提取的一部分,而将lnode.cpp想象成函数的实现部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VS 2022 C++ 自定义头文件示例 的相关文章

随机推荐

  • 人工智能 知识图谱

    关于举办 2022年数字信息化培训项目系列 知识图谱Knowledge Graph构建与应用研修班线上课程的通知 各有关单位 一 培训目标 本次课程安排紧密结合理论与实践 xff0c 深入浅出 xff0c 循序渐进 从基本概念讲起 xff0
  • 深度学习(Deep Learning)

    知识关键点 1 人工智能 深度学习的发展历程 2 深度学习框架 3 神经网络训练方法 4 卷积神经网络 xff0c 卷积核 池化 通道 激活函数 5 循环神经网络 xff0c 长短时记忆 LSTM 门控循环单元 GRU 6 参数初始化方法
  • 基于深度学习的机器人目标识别和跟踪

    如今 xff0c 深度学习算法的发展越来越迅速 xff0c 并且在图像处理以及目标对象识别方面已经得到了较为显著的突破 xff0c 无论是对检测对象的类型判断 xff0c 亦或者对检测对象所处方位的检测 xff0c 深度学习算法都取得了远超
  • 散列表与探测法

    动态查找的时候 如果用查找树同时对俩个变量名 字符串 进行查找 会导致效率不高的问题 引入散列的思想 把字符串变成数字 使得对字符串的比较变成对数字的比较 查找方式时间复杂度顺序查找O n 二分查找 静态查找 O log2N 二叉搜索树O
  • Springboot实现VNC的反向代理

    背景 用户需要通过前端HTML页面的noVNC xff08 noVNC是什么 xff1f xff09 客户端连接底层VNC Server服务端 xff0c 为了防止VNC Server的IP暴露 xff0c 因此需要做一层代理 正常情况下使
  • Visual Studio Code 的C++环境配置和调试

    目录 前言 xff1a 1 为什么要写这篇文章 xff1f 2 为什么选择VS Code xff1f 3 如何联系我 xff1f 简而言之 xff0c VS Code免费 43 快速 43 好用 43 潜力无穷 xff1b 一 安装VS C
  • 浅析向量(Vector),迭代器(Iterator)和数组(Array)

    目录 前言 Foreword 向量 Vector 1 何为向量 xff1f 2 如何初始化Vector向量 xff1f 3 向量的基本操作 xff1a 4 Range based For Statement 5 向量的插入操作 xff1a
  • 《数字电路分析》学习札记

    目录 前言 xff1a Chapter 1 数字逻辑基础 进制 xff1a 进制间转换方法 xff1a BCD xff1a 余3码 xff1a 余3循环码 xff1a 格雷码 xff08 循环码 xff09 xff1a 二进制数 格雷码 x
  • Ubuntu 22.04 双系统安装和卸载

    前言 xff1a 一 为什么选择Ubuntu系统 xff1f 1 免费且提供长期系统维护支持 xff1b 2 是主流的Linux服务器发行版 xff1b 3 强大的Shell xff1b 4 简洁好看的图形化UI界面 xff1b 5 丰富的
  • CSS-Div居中方法(Position方法)

    目录 代码展示 xff1a 实际效果 xff1a 具体分析 xff1a 如何联系我 xff1f 代码展示 xff1a lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt
  • 字符设备驱动-linux驱动开发第3部分-朱有鹏-专题视频课程

    字符设备驱动 linux驱动开发第3部分 4561人已学习 课程介绍 本课程是linux驱动开发的第3个课程 xff0c 接上部分继续讲解字符设备驱动的开发要点 xff0c 重点是相关的内核源代码的解析和一些真正驱动惯用的编程手法的引入 本
  • C++测试代码运行时间

    如果我们想直观地看出朴素算法和其他算法对程序运行时间的影响 xff0c 那么就可以采取以下方式 方法1 xff1a 基于头文件ctime和函数clock 的实现 代码1 xff1a include lt iostream gt includ
  • VMware虚拟机安装CentOS 7

    目录 1 VMware软件安装 2 CentOS 7 镜像下载 3 VMware安装CentOS 1 安装前内容设置 xff1a 2 安装中操作步骤 3 安装后语言设置 4 将图形化界面切换为命令符界面 如何联系我 xff1f wei ha
  • 解决Windows开机后无启动项的问题

    前言 为什么会出现这个问题 xff1f 此前PC上装有Windows 43 Ubuntu双系统 xff0c 由于又配置了虚拟机下的Centos xff0c 我把Ubuntu系统卸载了 没想到手滑删除了Windows的引导项 如图所示 xff
  • KMP算法图文详解

    简介 xff1a Knuth Morris Pratt xff08 KMP算法or字符串查找算法 xff09 可在一较长串S内查找一子串P出现的位置 xff0c KMP算法利用最长公共前后缀的特性以避免重新检索先前配对的字符串 xff0c
  • 离散数学期末习题

    前言 xff1a 本文适用于应对HUEL离散数学 期末考试 xff0c 重点整理了HUEL离散数学 期末考试范围内的题型 xff0c 既可以应对HUEL离散数学期末考试 xff0c 亦可以作为数据结构与算法的预备知识 如何联系我 xff1f
  • VMware Tools在Centos 7环境的安装教程

    前言 xff1a 阅读本文 xff0c 您可以得到 xff1a VMware Tools在Centos7环境下的安装步骤 xff1b 正文 xff1a VMware Tools在Centos7环境下安装步骤 xff1b 1 您需要保持虚拟机
  • 宝塔面板快速部署SSL证书

    前言 xff1a 发现自己的网站不能使用https访问 xff0c 原来是没有为网站部署SSL证书 通过本文 xff0c 您可以一键免费部署SSL证书 xff08 Let 39 s Encrypt xff09 正文 xff1a 1 如图显示
  • 宝塔面板部署WordPress(保姆式教程)

    前言 xff1a 通过本篇文章 xff0c 您可以掌握 xff1a 1 基于宝塔面板的快速建站操作 xff1b 2 一些浅浅的建站知识与技能 xff1b 3 WordPress助您快速建站 xff0c 节省您的时间 xff1b 如何联系我
  • VS 2022 C++ 自定义头文件示例

    前言 xff1a 博主最近刚从VS Code转到VS 2022 xff0c 但发现自定义的方法和VS Code有些不同 xff0c 故出一期VS 2022自定义头文件的博客 xff0c 时间仓促 xff0c 请不吝赐教 如何联系我 xff1