17.C加加编程

  • 15.计算机图形学OpenGL与C++

    理解GLFW和GLAD

    GLFW()

    GLFW是一个开源的、跨平台的库,用于创建窗口、处理输入和渲染图形。它提供了一种简单的方式来与OpenGL进行交互,使得开发图形应用程序变得更加容易。

  • 14.新标准C加加程序设计

    内存分区模型

    内存代码区的意义:程序代码放在不同的区域,有程序自动管理的代码,也有程序员管理的代码,灵活管理;

    一、程序执行前

    1.代码区 存放二进制指令,就是代码,特点:

  • 13.从C到C++

    指针

    指针的声明: alt text alt text

    数组

    数组的范围必须是常量表达式,同时如果需要变化的范围可以做如下定义: alt text alt text

    2.字符串文字量

    指的是用 ““括起来的字符串。

  • 12.其他库的介绍

    为什么需要哈希函数?

    哈希函数在计算机科学中扮演着重要的角色,其主要作用包括:

    1. 数据检索:哈希函数可以将键(key)映射到哈希表中的一个位置,从而快速检索数据。这是哈希表(如 C++ 中的 std::unordered_mapstd::unordered_set)的基础。

    2. 11.STL库学习之适配器

      整体框架的回顾

      alt text alt text

      存在多种适配器-adapters

      一个人理解,要将适配器理解透彻,我们需要先从别的组件入手,这里以vector容器为例,我们都知道该容器需要迭代器,也就是一些智能指针来确定容器的头尾,以及内容位置,目的是方便后续的算法的怎删改查等操作,假设算法现在要做拿到位置8的数据,那么vector的指针要怎么移动呢?已知指针移动上,vector是随机访问指针,也就是前后都可以跑,而这个操作实际上是迭代器的其中一个内容,而这一内容就需要一个适配器去做适配。

    3. 10.STL库学习之仿函数

      仿函数的个人理解

      仿函数是行为类似函数的一个类,比较明显的特征是仿函数重载了operate(),比如你写了一个struct,并在里面重载了operate(),当调用这个类的()时就会返回响应的数据。

    4. 9.STL库学习之迭代器与算法

      标准库常用算法

      alt text alt text

      迭代器

      迭代器-的分类

      struct input_iterator_tag {}
      struct output_iterator_tag {};
      struct forward_iterator_tag:public input_iterator_tag{};
      struct bidirectional_iterator_tag:public forward_iterator_tag{};
      struct random_access_tag:public bidirectional_iterator_tag {};

      以上5中迭代器的继承关系,如下图所示。 alt text alt text

      1.Input Iterator(输入迭代器): 输入迭代器是最基本的迭代器类型,支持单向遍历,只能向前移动。

    5. 8.STL库学习之容器

      list

      vector

      deque

      alt text alt text

      deque的迭代器 alt text alt text

      deque实现中间插入值的做法:如果欲插入值在最前端(最尾端)调用push_front()push_back()),否则借助insert_aux()迭代器,实现如果欲插入位置靠近前端使用,就让前端的数据往前挪,否则往后挪。

    6. 7.STL库学习之分配器

      分配器源代码位置:xmemory.h

      alt text alt text

      除了array和vector外,其他容器的适配器必须是一个类,

      附件

    7. 6.STL库学习之筑基概要

      STL程序源代码位置

      了解自身编译器STL程序源代码位置。

      OOP 与 GP

      面向对象编程(OOP):

      面向对象编程是一种编程范式,它将数据和处理这些数据的方法封装在对象中。这种方法强调了数据和函数的捆绑,使得代码更加模块化,易于理解和维护。对象可以包含属性(数据)和方法(函数),它们一起工作来模拟现实世界的行为。

    8. 5.STL库之观其大略

      一下主要讲STL组件的测试用例,特别是容器的测试

      学习资料

      • CPLusPlus.com
      • CppReference.com
      • gcc.gnu.org
      • 《STL源码剖析》

      STL六大组件

      • 容器-Containers,申请内存用于存储数据
      • 分配器-Allocators,配合容器分配内存
      • 算法- Algorithms,处理某一数据的最优办法
      • 迭代器- Iterators,指针的泛型,本质与指针类似
      • 适配器- Adapters,
      • 仿函数-Functors,类似函数。

      六者的关系

    9. 4.C++2.0特性的使用

      VS 2022的设置

      首先你可以先用下面的代码测试使用可以执行:

          #include <iostream>
          void printTypes() {
          }
          template <typename T, typename... U>
          void printTypes(const T& t, const U&... u) {
              std::cout << t << std::endl;
              printTypes(u...);
          }
      
          int main() {
              printTypes('a', 1.5, 'b');
          }

      如果报错了,如typename…未定义,那么请你按照如下步骤操作, alt text alt text

    10. 3.导读

      书籍推荐

      学习路线

      路线 路线

    11. 2.组合与继承

      类与类的三种关系

      Composition-复合

      以我个人的理解,复合就是一个类中包含有另外一个类,使用到另一个类的内容。复合的类他们的构造和析构函数运行次序是,构造函数有内到外依次运行,析构函数则相反。可以使用下图表示这种关系

    12. 1.代码编写规范

      如何写一个标准的.h文件

      以下内容来自B站

      接下来将以复数的库文件为例来回答这个问题,下面是一段参考复数库文件代码:

      class complex
      {
      private:
          /* data */
          double re,im;
          friend complex& __doapl (complex*,const complex&);
      public:
          complex (double r,double i)
          :re(r),im(i)                //这是一个构造函数,这种写法意思是初始化变量
          {};
          complex& operator += (complex operator&);
          double read () const {return re;}  //这里需要加const 意思就是修饰函数的返回值,不允许改变返回值类型
          double imag () const {return im;}
      };

      构造函数的特性

      这一点需要关注下面的代码: