尝尝常九

一名计算机科学与技术的大学生,想要去探索这个世界

最近文章👇

C++基础语法

引用

引用相当于变量的别名。声明一个引用时,必须对其进行初始化,即声明它代表的是哪一个变量。在声明一个变量后,不能再将其声明为另一个引用了。可以取引用的地址,它的地址将会和它引用的变量的地址一样。

函数模板

有时候可能相通名称的函数需要作用于多种类型的变量,使用函数模板来达到这一效果,在函数的上一行使用关键字template<typename T>来将此函数声明为模板函数

 template<typename T>
 T max(T a,T b,T c){
     T result;
     if(a>b)
         result = a
     else
         result = b  
     if (result > c)
         return result;
     else
         return c;
 }

内部函数和外部函数

根据函数是否能被本文件外的其它文件所调用,可以分为内部函数和外部函数,内部函数使用关键字static描述,外部函数使用extern描述,关键字写到最左冠

面向对象程序设计的四个特点

抽象,封装,继承,多态性

类

构造函数、析构函数

类中的静态成员变量需要在类外进行声明

运算符重载

  • 重载 [] 运算符
 operator[](){
 ​
 }

重载运算符

重载<<到cout,cout是ostream的

友元

在类中使用friend将成员函数或类声明为友元函数或类,友元可以访问私有成员函数或变量

异常

包含头文件 #include <cstdlib> 函数 abort() 返回一个随实现而异的值,调用该函数将直接终止程序

 try{
 ​
 }catch(){
 ​
 }

C++头文件探索

char* getenv(const char* env_name) 该函数由<cstdlib> 头文件提供,作用是用来获得相应的环境变量

智能指针

#include <memory> 包含库

 auto_ptr<type> ptr(new type)
 unique_ptr<type> ptr(new type)
 shared_ptr<type> ptr(new type)
 make_unique<Class>(constructor_arr)
 //使用方法
 #include <memory>
 #include <string>
 ​
 int main(){
     std::auto_ptr<string> str(std::string);  // 创建一个string类型的对象指针,str为名称
     
  return 0;
 }

所有智能指针类都有一个explicit()构造函数,它将指针作为参数。

不会自动将指针转换为智能指针类

例:ptr_class 是一个智能指针类,ptr_nor是一个指针

 //正确使用方法:
 ptr_class = shared_ptr<type> (ptr_nor);
 shared_ptr<type>ptr_class(ptr_nor);
 //错误使用方法:
 ptr_class = ptr_nor;
 shared_ptr<type> ptr_class = ptr_nor;
注意事项

禁止将智能指针指向栈内存。因为当智能指针指向栈内存,过期时,它将释放栈内存的数据!这是错误!

避免将两个智能指针指向一个数据,因为这将导致同一个数据被释放两次。

两个auto_ptr指针对象,给ptr1复制,再执行语句ptr2=ptr1,这将使 ptr1指向的数据转交给ptr2,ptr1不再指向数据。auto_ptr和unique_ptr都采用所有权模型,但unique_ptr要优于auto_ptr 而使用shared_ptr指针对象将引用计数+1,这就可以使多个指针指向一个数据,释放指针时只有当计数归零时才释放数据占用的内存,不为0时只将指针对象删除,并且引用计数-1

unique_ptr允许将一个临时的unique_ptr进行赋值 不要将一个unique_ptr指针复制给另一个unique_ptr指针,这将导致程序在编译时发生错误,需要使用标准库中的std::move()函数进行赋值 pt = std::move(ps) pt和ps均为智能指针 可以将unique_ptr指针存入STL容器中,只要不调用类似sort() 这种会交换位置的函数,否则就会出错

如何选择智能指针

要使用多个指向同一个对象的指针时。应选择shared_ptr

C++标准时间库

系统时钟 system_clock 稳定时钟 steady_clock 高分辨率时钟 high_resolution_clock 三个时钟都有 now() 函数

时间点 time_point 时间段 duration

稳定时钟 steady_clock

std::chrono::steay_clock::now() 返回当前时间,返回类型为std::chrono::time_point

对时间段使用泛型编程 需要填写精度 int or double

Lambda表达式

 //Lambda 函数形式
 [captures](){};
 ​
 ​

captures 捕获列表

符号描述
[]不进行任何捕获
[&]按引用的形式捕获所有
[=]按值的形式捕获所有
[=,&a]除了 a使用引用外,其它使用按值传递
[&,a]除了a使用按值传递外,其它使用按引用传递

多线程

多线程并发指的是在同一个进程中执行多个线程。

包含头文件#include<thread>

创建一个线程std::thread my_thread;

两种启动的线程: thread.detach() 启动线程后,主线程会继续向下执行代码 thread.join() 等待线程结束后程序才会继续向下执行

this_thread 类

mutex

包含头文件 #include <mutex> 互斥量: std::mutex; //基本Mutrex类 常用操作 lock() 资源上锁 unlock() 资源解锁 trylock() 查看是否上锁 同一个线程已经对它上锁,将会产生死锁

死锁:两个或以上的进程因竞争资源或彼此通信而导致的阻塞

std::recursive_mutex; //递归Mutex类 std::time_mutex; //定时Mutex类 std::recursive_timed_mutex //定时递归Mutex类

STL

标准库 由6部分组成

algorithm 算法 containers 容器 iterator 迭代器 分配器

算法

sort()排序算法需要容器支持随机访问

Vector 向量

queue 队列

从尾部插入数据,从首位取数据

deque 双端队列

可以从首和尾插入和删除数据

stack 栈

只能从头部进入和删除

待看

  • 学习<functional> 头文件中的内容
  • 学习<cmath>头文件
  • 矩阵法求定积分 – 中点矩阵法,辛普森法,高斯-勒让德求积
  • 椭圆积分法

Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注