C++与数据结构
文章平均质量分 80
C++、STL、数据结构、算法、编译器
RuiH.AI
学习ing
展开
-
C++学习 二十、STL(4)pair类型, tuple类型
C++学习 二十、STL(4)关联容器前言pairtuple前言本篇继续学习C++,STL的关联容器类型。pairpair类型在utility头文件中,用于把两个数据组成一对,使用pair就能让函数间接返回两个值。C++中的pair类似于python中的[a, b]。可以通过构造函数或者utility头文件中的make_pair函数创建pair对象,可以直接访问pair对象的first, second成员,也可以使用>,<,=比较同类型的pair对象。(首先比较first成员,如果相等原创 2022-03-17 16:45:16 · 1029 阅读 · 0 评论 -
C++学习 二十、STL(3)序列容器
C++学习 二十、STL(3)序列容器前言序列容器类型序列容器方法前言本篇继续学习C++中的STL,序列容器。序列容器类型序列容器,一般是通过类似数组的形式,按照次序存储某种类型的数据,包括:array<T, N>数组容器,类似于普通数组,存储N个T类型的数据,不能增加或者减少元素,只能修改元素的值。vector<T>向量容器,长度可变,当内存不足时会自动申请分配新内存。可以在尾部高效增加或者删除元素,也可以在任意位置低效插入和删除元素。deque<T>双原创 2022-03-15 14:55:34 · 1671 阅读 · 0 评论 -
C++学习 二十、STL(2)迭代器
C++学习 二十、STL(2)迭代器前言迭代器定义迭代器迭代器功能前言本篇继续学习C++ STL的内容,迭代器。迭代器上篇提到,迭代器是一种用于访问和遍历容器内元素的数据类型,是指针的泛化。迭代器使得编程时,可以用同一种方法处理不同的容器。定义迭代器容器有自己的迭代器类型,创建迭代器的方法是容器类型<数据类型>::迭代器类 迭代器名迭代器类可分为:iterator正向迭代器const_iterator常量正向迭代器reverse_iterator反向迭代器const_r原创 2022-03-14 16:16:30 · 1097 阅读 · 0 评论 -
C++学习 二十、STL(1) vector模板类
C++学习 二十、STL(1) vector模板类前言vector模板类创建vector对象,遍历元素迭代器容器的基本方法STL函数,sort后记前言STL标准模板库是C++中非常有用的功能库。本篇从vector容器开始学习STL。vector模板类创建vector对象,遍历元素vector模板类在头文件vector中,用于存储数组,并采用动态内存分配。创建一个vector对象并初始化长度,通过[]运算符访问元素:#include <vector>using namespace原创 2022-03-13 12:26:58 · 1357 阅读 · 0 评论 -
C++学习 十九、类型转换符
C++学习 十九、类型转换符前言static_castdynamic_castconst_castreinterpret_cast前言本篇学习C++中的四个类型转换符号,static_cast,dynamic_cast,const_cast,reinterpret_cast。C++使用以上这四种转换代替C风格的强制类型转换。static_caststatic_cast用于低风险的转换,例如:自动类型转换,如int转double向上转换,如派生类指针转基类指针向下转换,如基类指针转派生类指针原创 2022-03-12 15:27:04 · 757 阅读 · 0 评论 -
C++学习 十八、异常
C++学习 十八、异常前言异常机制try, catch, throw异常规范C++异常类前言本篇学习C++中的异常处理。异常机制C++中,如果出现了除0、数组越界、分配内存不足时,程序会直接报错崩溃。为了追踪BUG,让程序出错时能够正常退出,可以使用异常处理机制。try, catch, throwtry, catch语句块与throw表达式是C++异常处理的方式。try语句块用于执行可能发生异常的程序块,throw语句块用于处理异常。throw表达式用于抛出一个异常。int main(){原创 2022-03-11 12:17:39 · 662 阅读 · 0 评论 -
C++学习 十七、类模板
C++学习 十七、类模板前言类模板定义类模板模板具体化隐式实例化显式实例化显式具体化部分具体化模板编译模板成员模板与友元非模板友元约束模板友元非约束模板友元前言本篇学习C++中的泛型编程之二,类模板。类模板类模板与函数模板类似,用于指导编译器生成类,因此也有模板实例化和具体化。定义类模板使用template<typename T>模板头,提示编译器是一个模板。template<typename T>class TemplateClass{ private:原创 2022-03-10 16:10:45 · 272 阅读 · 0 评论 -
C++学习 十六、C++类使用总结
C++学习 十六、C++类使用总结前言重要的成员函数构造函数析构函数转换构造函数与转换函数自动生成的成员函数默认构造函数默认析构函数默认复制构造函数默认赋值运算符引用传值,传引用返回值,返回引用const访问权限继承继承关系继承成员多态抽象类同名成员友元类与动态内存单个类继承前言本篇总结一下C++类的使用。重要的成员函数构造函数创建对象初始化成员的函数,不被继承。构造函数完成前,对象并不存在,因此不能是虚方法。析构函数原型:~Base();用于清理对象的函数,销毁对象时系统自动调用。析构原创 2022-03-08 21:03:17 · 782 阅读 · 0 评论 -
C++学习 十五、类继承(6)动态内存
C++学习 十五、类继承(6)动态内存前言基类的动态内存派生类的动态内存派生类不使用动态内存派生类使用动态内存前言本篇继续学习类继承中的动态内存问题。C++类中如果创建了动态内存,则需要手动提供复制构造函数,析构函数和重载赋值运算符,以防止内存泄漏和double free问题。基类的动态内存之前的博客中提到,如果类内分配了动态内存,则必须手动提供复制构造函数,析构函数和重载赋值运算符。在基类中new一块动态内存的示例如下:class Base{ private: int原创 2022-03-01 17:17:39 · 578 阅读 · 0 评论 -
C++学习 十五、类继承(5)抽象类,纯虚函数
C++学习 十五、类继承(5)抽象类,纯虚函数前言纯虚函数与抽象类前言本篇继续类继承,抽象类如果两个类之间的关系是A is like B,则最好的类设计方法是,将AB共同的部分提取出来作为一个抽象基类。纯虚函数与抽象类C++的类能够提供没有定义的函数,被称为纯虚函数(pure virtual function),声明如下:virtual 返回类型 函数名(参数列表) = 0;纯虚函数表示一个未实现的接口,需要在派生类中重新实现。包含纯虚函数的类自动成为抽象类,抽象类不能创建具体的对象;实现了原创 2022-02-28 16:07:11 · 698 阅读 · 0 评论 -
C++学习 十五、类继承(4)基类方法重写,隐藏
C++学习 十五、类继承(4)基类方法重载,重写,隐藏前言成员函数重载重写隐藏虚函数的重写与隐藏前言本篇区分C++类方法中的概念:重载,重写,隐藏成员函数重载重载成员函数是对于类内而言的:class A{ public: void func(); void func(int); // overload void func(double, double); // overload}A中的三个func函数是重载overload。重写基类的同名虚方法在派生类中被重新定义,称为重写原创 2022-02-24 17:23:05 · 4417 阅读 · 0 评论 -
C++学习 十五、类继承(3)静态联编,动态联编,虚函数
C++学习 十五、类继承(3)静态联编,动态联编,虚函数前言联编静态联编与动态联编非虚函数,静态联编虚函数,动态联编动态联编的缺点虚函数的工作原理虚函数的使用后记前言本片继续学习类继承,静态联编与动态联编。联编联编 (binding),是编译器为源码中的函数调用语句指定执行时使用的函数代码块。联编在C语言中非常简单,因为每个函数名都对应不同的函数。C++中,由于函数重载,同一函数名可能表示不同的函数。编译器在编译时查看函数名和参数列表确定使用的函数,称为静态联编。虚函数出现后,编译器不能在编译时原创 2022-02-24 13:22:58 · 364 阅读 · 0 评论 -
C++学习 十五、类继承(2)虚函数,多态
C++学习 十五、类继承(2)虚函数前言基类,派生类,指针虚函数与多态虚函数,virtual关键字多态前言本篇继续类继承的学习,虚函数基类,派生类,指针基类与派生类具有非常特殊的关系:可以用派生类对象为基类对象赋值;可以用派生类对象为基类对象初始化;基类指针可以指向派生类对象;基类引用可以绑定派生类对象。上面四个关系反过来不成立。#include <cstdio>#include <iostream>#include <cstring>us原创 2022-02-23 18:58:50 · 219 阅读 · 0 评论 -
C++学习 十五、类继承(1)基类,派生类,访问权限,protected
C++学习 十五、类继承(1)基类,派生类前言类继承类的关系与继承基类, 派生类基类派生类构造函数,析构函数文件位置访问权限protected前言本篇开始学习C++类的继承。类继承C++的类继承用于描述一种is的关系。is关系,比如橘子是水果,猴子是动物。类S是另一个类F的衍生,通过类继承的关系,就能够在F类的基础上,增量修改得到类S。类F称为基类,S称为派生类。派生类继承了基类的数据和方法,并且能够添加数据和方法。类的关系与继承类与类的关系决定了是否适合继承。b is a关系:橘子是水果原创 2022-02-22 18:27:21 · 1680 阅读 · 0 评论 -
C++学习 十四、类的进阶(6)返回对象
C++学习 十四、类的进阶(6)返回对象前言类与动态内存小结函数返回对象返回非const对象返回const对象返回非const引用对象返回const引用对象示例后记前言本篇首先小结类中动态内存的使用,然后记录返回对象。类与动态内存小结构造函数中使用new分配动态内存,则析构函数中必须使用delete释放动态内存。析构函数只有一个。因此有多个构造函数时,要考虑new与new []的兼容性。构造函数如果分配动态内存,则需要定义一个深拷贝复制构造函数,重载一个深拷贝赋值运算符。函数返回对象函数原创 2022-02-20 12:27:46 · 1116 阅读 · 0 评论 -
C++学习 十四、类的进阶(5)动态内存
C++学习 十四、类的进阶(5)动态内存前言类与动态内存动态内存与析构函数类的特殊成员函数默认构造函数默认析构函数复制构造函数默认复制构造函数复制构造函数,浅拷贝和深拷贝赋值运算符后记前言本片继续类的进阶学习,动态内存。类与动态内存动态内存与类的关系主要有两种:使用动态内存存储对象,对象开辟动态内存。第一类,使用className objectPointer = new className;分配动态内存,然后使用delete objectPointer;释放内存。第二类,构造函数中使用new开辟原创 2022-02-19 16:38:04 · 483 阅读 · 0 评论 -
C++学习 十四、类的进阶(4)成员初始化列表,类内初始化,静态成员,嵌套结构
C++学习 十四、类的进阶(4)成员列表初始化,类内初始化,静态成员,嵌套结构前言成员初始化列表类内初始化静态成员静态数据成员静态成员函数静态成员总结嵌套结构前言本篇类的进阶学习包括,成员列表初始化,类内初始化,静态成员,嵌套结构。成员初始化列表之前的构造函数,是在函数内部代码块中初始化成员。那么就会出现const成员,引用成员的初始化问题,对于下面这个类声明:class A{ private: int a_; double b_; con原创 2022-02-18 14:13:01 · 949 阅读 · 0 评论 -
C++学习 十四、类的进阶(3)自动类型转换,强制类型转换
C++学习 十四、类的进阶(3)自动类型转换,强制类型转换前言内置类型的转换类的转换其它类型转换为类explicit关键字类型转换的二义性常见的类转换类转换为内置类型前言本篇继续类的进阶学习,自动类型转换和强制类型转换。内置类型的转换C++的内置类型具有自动转换(隐式)和强制转换(显式)。只要类型兼容,就能自动转换:int x = 1.66; // double to intfloat y = 2; // int to floatlong z = y; // float to long否原创 2022-02-17 15:48:47 · 609 阅读 · 0 评论 -
C++学习 十四、类的进阶(2)运算符重载
C++学习 十四、类的进阶(2)运算符重载前言运算符重载与函数重载运算符重载运算符重载,类方法运算符重载,友元<< 运算符的重载后记前言本篇继续C++类的进阶学习,运算符重载。运算符重载与函数重载C++中,函数重载使同一函数名根据不同的参数列表实现不同的功能。运算符重载与函数重载类似,使同一运算符对于不同类型的操作数实现特定的功能。运算符重载实际上也是由函数重载实现的,本质上是函数重载。运算符重载关键字operator用于重载运算符。运算符重载格式为:返回类型 operator原创 2022-02-16 18:18:59 · 1005 阅读 · 0 评论 -
C++学习 十四、类的进阶(1)友元
C++学习 十四、类的进阶(1)友元前言友元友元函数友元类友元成员函数后记前言本篇开始类的进阶内容,友元。友元类的访问控制权限要求,对于类的私有部分,只有类的公有方法才能访问。友元是一个例外。关键字friend表示友元声明。友元函数友元函数不属于该类成员,但可以访问该类的私有成员。友元函数可以是普通函数,也可以是其它类的成员函数。类的友元函数声明必须放在类中,示例如下:#include <cstdio>#include <iostream>class Simp原创 2022-02-16 13:03:27 · 473 阅读 · 0 评论 -
C++学习 十三、类 (3)类作用域,枚举类
C++学习 十三、类 (3)类作用域,枚举类前言类作用域类内常量,枚举成员初始化静态成员类内枚举C++11枚举类后记前言本篇是类基础中的补充部分,类作用域,枚举类。类作用域之前作用域篇中提到了全局作用域和局部作用域,以及命名空间作用域,此外C++类引入了类作用域。类中的名称,即数据成员和成员函数,作用域都为整个类,在类内是已知的,类外是未知的。类中的名称不会与类外名称冲突。在定义类方法时,必须使用作用域解析运算符::,如下所示:SimpleClass::SimpleClass(int a=1原创 2022-02-15 13:05:49 · 726 阅读 · 0 评论 -
C++学习 十三、类 (2)构造函数,析构函数
C++学习 十三、类 (2)构造函数,析构函数前言构造函数声明和定义构造函数使用构造函数默认构造函数使用默认构造函数析构函数赋值与初始化对象赋值对象的列表初始化后记前言本篇继续类与对象,构造函数和析构函数。构造函数类的构造函数被用于对象初始化。构造函数也属于类方法。声明和定义构造函数构造函数的定义与其它类方法相同,即在类声明中声明构造函数,类方法定义中定义构造函数。构造函数的名字与类名相同,并且没有返回类型,示例如下:// declare_class.h#ifndef DECLARE_CL原创 2022-02-14 12:23:56 · 543 阅读 · 0 评论 -
C++学习 十三、类 (1)类与对象,this指针
C++学习 十三、类 (1)类与对象,this指针,构造函数,析构函数前言面向对象的编程类与对象类定义类声明,关键字class类的访问控制类方法定义,类名作用域解析类的内联方法类使用类的对象使用类方法,访问类数据对象数组this指针this指针的实质常量this指针后记前言本篇开始进入C++的特色核心部分,类与对象。面向对象的编程C语言是面向过程的编程,在设计某项功能时,首先考虑功能的流程,再考虑数据的表示方法。C++是面向对象的编程,在设计某项功能时,需要同时考虑数据的表示方法,以及数据的使用和原创 2022-02-13 14:50:19 · 281 阅读 · 0 评论 -
C++学习 十二、内存模型,作用域,名称空间 (3)命名空间
C++学习 十二、内存模型,作用域,名称空间 (3)命名空间前言命名空间namespace创建命名空间访问命名空间内成员全局命名空间嵌套命名空间命名空间别名无名命名空间关键字usingusing声明using编译指令using声明与using编译指令命名空间规范后记前言本篇继续C++学习记录,命名空间。如果,某程序使用的两个开源库都定义了一个名为start()的函数,那么在main()函数中该如何调用某个库的start()函数呢?C++通过命名空间被用于限制命名的作用域。命名空间namespace原创 2022-02-12 15:45:28 · 455 阅读 · 0 评论 -
C++学习 十二、内存模型,作用域,名称空间 (2)内存模型
C++学习 十二、内存模型,作用域,名称空间 (2)内存模型前言存储持续性,作用域,链接性存储持续性作用域链接性自动存储前言本篇继续C++学习记录,变量与函数的内存模型。存储持续性,作用域,链接性存储持续性存储持续性指的是数据保留在内存中的时间。C++中,数据的存储方案有三种,分别是自动存储,静态存储和动态存储。在函数或代码块中定义的变量就是自动变量,对应自动存储,在执行函数或者代码块时被创建,执行段结束后释放内存。在函数外定义和使用static关键字定义的变量就是静态变量,对应的是静态存储原创 2022-02-11 21:25:53 · 299 阅读 · 0 评论 -
C++学习 十二、内存模型,作用域,名称空间 (1)多文件编译
C++学习 十二、内存模型,作用域,名称空间 (1)多文件编译前言多文件编译模块化文件结构头文件.h头文件结构源文件.cpp后记前言本篇继续C++学习总结。本篇将探讨C++中,变量与函数的内存模型,以及在多文件程序中的关系。先从多文件编译方法开始。多文件编译模块化由于大型程序的编译非常耗时,将所有代码写在一个源文件里是不现实的。通常做法是,把结构,类,符号常量等声明放在一个文件中,把具有相同功能的函数放在另一个文件中,把实际运行的程序单独放在一个文件中,形成不同的模块。文件结构一般把C++程原创 2022-02-10 21:19:32 · 395 阅读 · 0 评论 -
C++学习 十一、const, mutable关键字
C++学习 十一、const关键字前言const常量const修饰普通类型的变量volatile关键字常量指针与指针常量常量指针指针常量一句话辨析const变量与指针常量引用const与函数参数const指针参数const引用参数const返回类型返回值返回引用后记前言本篇继续C++学习,const关键字。const常量C++中,const被用于向编译器指定不变值,也就是常量。const修饰普通类型的变量当const用于修饰普通类型的变量时,该变量值将不能被修改,也就是成为一个常量,否则将报错e原创 2022-02-07 19:07:52 · 2245 阅读 · 0 评论 -
C++学习 十、函数重载,函数模板
C++学习 十、函数重载,函数模板前言函数重载二义性强制类型转换类型与类型引用默认参数const参数函数模板模板函数声明与定义模板重载模板具体化前言本篇继续C++记录,函数重载与函数模板。函数重载函数重载是C++的特色,允许一个程序中定义多个同名函数,但函数的参数列表(也称为特征标)必须不同。可以通过函数重载,使函数根据不同类型的参数实现不同的功能(相同的也行),示例如下:void swap(int& a, int& b) { int temp = a; a = b; b =原创 2022-02-06 23:22:43 · 1509 阅读 · 0 评论 -
C++学习 九、引用
C++学习 九、引用前言引用变量创建引用变量引用的本质函数与引用引用参数返回引用左值,右值,左值引用,右值引用左值lvalue与右值rvalue左值引用右值引用后记前言本篇继续C++学习记录,引用。引用变量引用是C++与C的一大扩展。引用变量是已定义变量的别名。创建引用变量与其它变量不同,引用变量必须在声明的同时初始化,通过&标识,如下所示:int a;int& aa = a;此时,&不再表示取地址,int&表示整型引用。变量a与引用变量aa的值和地址是原创 2022-02-05 15:30:19 · 656 阅读 · 0 评论 -
C++学习 八、函数
C++学习 八、函数前言函数使用函数声明(函数原型)函数定义函数调用函数参数,按值传递传值传址函数与数组函数与字符串函数与结构体默认参数内联函数前言本片继续学习C++,函数。函数使用函数是C++的基本编程模块,以便于程序的模块化和代码复用。函数声明(函数原型)要使用函数,首先要提供函数原型,即声明函数,格式为TypeName FuncName (Parameters)即返回值类型 函数名 (参数列表)函数原型为编译器提供了函数名,函数返回值类型,参数类型和数量,用以编译器检查和处理。下面原创 2022-02-03 20:39:31 · 614 阅读 · 0 评论 -
C++学习 七、枚举类型,结构体
C++学习 七、枚举,结构体前言枚举类型enum定义枚举常量设定枚举变量声明初始化运算符枚举类型与整形无名枚举类型结构体struct定义结构体变量声明初始化赋值成员运算符成员函数结构体数组初始化后记前言本片继续C++学习,枚举与结构体。枚举类型C++提供了const和enum两种创建符号常量的方法,后者就是枚举类型。enum定义enum [枚举类型名] {符号常量名},直接看使用方法:enum color{red, green, blue};上面的语句做了两件事:创造了枚举类型colo原创 2022-01-30 22:47:16 · 1739 阅读 · 1 评论 -
C++学习 六、指针
C++学习 六、指针前言指针与地址指针使用声明指针指针变量的创建细节取地址符初始化赋值指针的整形赋值算术运算指针解引用(取值运算符)区分指针类型与解引用动态内存分配动态数组动态内存释放数组名与指针指针数组与数组指针指针数组数组指针对数组取地址后记前言指针是C,C++与其它语言的一大区别,也是C++程序设计里的难点。本篇学习C++指针的基本用法。指针与地址地址是内存空间的位置,指针是保存地址的特殊数据类型。广义的说,指针就是地址,指针变量用于存储地址。狭义的说,地址就是内存空间的编号,而指针有具原创 2022-01-29 22:14:57 · 1078 阅读 · 0 评论 -
C++学习 五、数组与字符串 (2)字符串
C++学习 五、数组与字符串 (2)字符串字符串字符数组初始化sizeof(), strlen()字符串输入cin.get(char* name, int strsize), cin.get()的混合使用cin.get()失效位字符串字符串可以看作特殊的char类型的数组,其特殊性表现在数组最后一个元素是空字符'\0':char mystring[9] {'m', 'y', 's', 't', 'r', 'i', 'n', 'g', '\0'};'\0'是字符串数组中非常重要的组成部分,strcp原创 2022-01-22 15:23:16 · 667 阅读 · 0 评论 -
C++学习 五、数组与字符串 (1)数组
C++学习 五、数组与字符串 (1)数组前言数组数组声明数组访问索引越界问题数组初始化禁止数组赋值C++11禁止缩窄转换(列表初始化)前言本篇继续C++学习,指针前置章节,数组和字符串。数组数组声明// 数组类型 数组名 [元素数]int arrayA[6]; // 元素数必须是常量上面的数组声明会开辟一块储存6个int类型变量的内存空间。数组访问// 元素索引从0开始arrayA[0] = 0;arrayA[5] = 5;索引从0开始,到数组长度-1为止。索引越界问题注意:原创 2022-01-20 14:50:40 · 599 阅读 · 0 评论 -
C++学习 四、智能指针总结
C++学习 四、智能指针总结前言智能指针的作用智能指针的特点shared_ptr共享指针循环引用unique_ptrweak_ptr手写一个shared_ptr类后记前言之前分别学习了C++的三种智能指针shared_ptr,unique_ptr,weak_ptr的使用,本篇来做一个总结。智能指针的作用C/C++的一大特色就是指针,常用的堆指针分配方式需要手动进行内存空间的释放。智能指针的出现为堆内存的管理提供了方便,降低了内存泄漏的风险。智能指针的特点智能指针实际上是通过类把堆指针进行封装,原创 2022-01-18 14:54:41 · 383 阅读 · 0 评论 -
C++学习 三、weak_ptr使用
C++学习 三、weak_ptr使用前言weak_ptr概述创建weak_ptr对象创建空weak_ptr对象使用拷贝构造函数初始化weak_ptr对象使用shared_ptr对象初始化weak_ptr对象weak_ptr成员函数weak_ptr运算符前言本篇继续智能指针weak_ptr的学习。weak_ptr虽然是智能指针,但实际上是作为shared_ptr的辅助指针使用。weak_ptr概述weak_ptr通常不单独使用,一般用于查看对应的shared_ptr的信息。weak_ptr没有重载*原创 2022-01-17 11:42:47 · 3040 阅读 · 0 评论 -
C++学习 二、unique_ptr使用
C++学习 二、unique_ptr使用前言unique_ptr概述创建unique_ptr对象创建空unique_ptr对象通过堆指针创建unique_ptr对象通过std::make_unique()函数创建unique_ptr对象unique_ptr成员函数unique_ptr的操作符创建unique_ptr数组测试代码后记前言本篇继续C++11智能指针学习,unique_ptrunique_ptr概述与shared_ptr类似,unique_ptr也有自动释放空间的特性,不需要手动释放空间和原创 2022-01-16 22:23:24 · 2450 阅读 · 0 评论 -
C++学习 一、shared_ptr使用
C++学习 一、shared_ptr使用前言shared_ptr概述创建shared_ptr对象0 声明shared_ptr对象1 通过堆指针创建shared_ptr对象2 通过拷贝构造函数创建shared_ptr对象3 通过赋值运算符修改shared_ptr4 通过std::make_ptr函数初始化几个shared_ptr对象初始化问题shared_ptr类禁止构造函数的隐式转换不能用栈指针进行初始化不能将同一普通指针给多个shared_ptr对象初始化循环引用问题shared_ptr与操作符share原创 2022-01-15 21:43:26 · 4483 阅读 · 0 评论 -
CMakeLists学习二、链接库搜索路径与ld
CMakeLists学习二、链接库搜索路径与ld前言gcc的链接gcc链接命令ld搜索路径ldconfig刷新动态库缓存CMakeLists指定链接搜索路径后记前言本文继续CMakeLists相关学习,链接库的相关问题。gcc的链接gcc链接命令首先需要知道gcc编译时的链接指令:gcc -o helloworld helloworld.c -I/path_to_include -i xxx.h -L/path_to_lib -lxxx以上这行命令,-I/dir指定了gcc搜索头文件的路径,原创 2022-01-14 12:03:43 · 7753 阅读 · 2 评论 -
CMakeLists学习一、find_package查找包
CMakeLists学习一、find_package查找包前言引例环境变量find_package查询路径设定查询路径默认路径链接库问题find_package()命令前言很久之前就想写关于CMakeLists相关的学习记录,但当时的重点在数学基础内容上,这一块就搁置了,现在重新记录一下。首先就是cmake中查找第三方包指令find_package()的原理引例图像相关的工程中,最常用的第三方包OpenCV需要通过CMakeLists来配置,常见写法如下:find_package(OpenCV原创 2022-01-13 14:45:14 · 12764 阅读 · 2 评论