C++
文章平均质量分 57
Xu_lib
Just Coding !
展开
-
C++编译error LNK2019: unresolved external “XX“
链接错误:Linker Tools Error LNK2019C++项目编译过程中常常常常出现 error LNK2019: unresolved external "XX" 的错误提示,主要原因在于链接的过程中,在当前引用的库中不能找到对应引用变量或函数的定义。此时需要将定义该引用变量的库添加到对应的项目中。主要有两种方式来解决该问题:如需要手动添加 PowrProf.lib 库,操作如下:使用 #pragma comment ,如: #pragma comment (lib, "PowrPro原创 2021-08-25 15:02:43 · 1502 阅读 · 0 评论 -
函数指针
一、函数指针:即:指针变量中存放的是函数的地址,通过该指针可以直接调用其指向的函数。程序中定义的函数,在编译时会为其分配对应的内存空间。该内存空间的地址即为函数名。而对函数名进行取地址操作的结果仍为该函数地址。1、定义函数指针/* P即为函数指针,前面的 int为指针所指向函数的返回值类型, 后面的(double,double) 为指针所指向函数的形参列表。*/int (*p)(double,double);2、应用实例将函数的地址赋给函数指针,然后通过函数指针来调用对应的函数原创 2020-08-25 17:17:13 · 444 阅读 · 0 评论 -
关于动态多态的错题分析
C++中关于动态多态自己的理解仍然太浅了,对于多次在基类和派生类中来回调用的一些情况,仍然会产生动态多态的情况。求如下程序的输出结果:#include<iostream>#include<string>using namespace std;class Base{public: virtual void Send() { cout << "\nSend_Base:" << mVal << endl; } ~Base()原创 2020-06-18 22:33:37 · 260 阅读 · 0 评论 -
sizeof、size、strlen、length 用法总结
一、sizeof 用法1、基本用法sizeof 为运算符,其结果是求对应参数的字节大小,它的值是在编译的时候就计算完成了。所以它不能用来计算动态分配内存空间的大小。2、应用实例(1)、常见示例// 1、求各种类型所占字节数sizeof(int); //求整型所占的字节数,结果为4个字节sizeof(char); // 求字符型所占字节数,结果为1个字节sizeof(double *); // 求指针类型所占的字节数,由于指针只是存放地址,所以占4个字节,与指针所指的类型无关。/原创 2020-06-14 12:32:52 · 1379 阅读 · 0 评论 -
清除字符串string中的空格
1、只清除字符串首尾的空格方法一:调用string的成员函数来进行操作#include<iostream>#include<string>#include<sstream>using namespace std;int main(){ //str字符串首尾各有两个空格。 string str = " hello this is just a test. "; int len1 = str.length(); auto s1 = str.fin原创 2020-05-24 18:52:03 · 1477 阅读 · 1 评论 -
pair 类型总结
1、pair 简介pair 定义在头文件 utility 中,一个pair保存两个数据成员 , 分别命名为 first 、second ,成对出现的数据,可以利用对组来返回这两个数据。与其他标准库类型不同,pair数据成员是 public 的。2、pair的基本操作标准库定义的pair操作如下:pair<T1, T2> p:创建一个空的pair对象pair<T1, T2> p(v1, v2):用v1、v2来初始化pair对象pair<T1, T2> p={v原创 2020-05-24 17:08:47 · 991 阅读 · 0 评论 -
STL标准库的总结
一、STL基础1、STL是为了提高代码的可重复使用而产生,提供了一个标准的模板库,可供直接调用。2、为了建立数据结构和算法的一套标准,而诞生了STL3、STL从广义上可以分为:容器(container)、算法(algorithm)、迭代器(iterator)4、容器和算法之间通过迭代器进行连接。5、STL几乎所有的代码都采用了模板类或者模板函数。二、STL六大件STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器1、容器:各种数据结构,如 vector、原创 2020-05-23 18:40:40 · 416 阅读 · 0 评论 -
sstream —— string流中读写数据
sstream 头文件定义的三个类型来支持IO操作。istringstream :从string中读取数据ostringstream :向string中写入数据stringstream:即可以从string 中读取数据,也可以向其中写入数据。sstream的一些特有操作// ssm01是一个未绑定的stringstream对象stringstream ssm01;// ssm02是一个stringstream对象,保存字符串 s 的一个拷贝stringstream ssm02(s);原创 2020-05-18 19:56:55 · 1443 阅读 · 0 评论 -
fstream —文件读写操作
一、fstream 文件输入输出流1、文件读写的三种类型ifstream:从一个给定文件中读取数据 。ofstream:向一个给定的文件中写入数据fstream:可以读写给定的文件。它可以用IO库中的<<、>>、getline()等方式来读写文件。其中getline()只能用来读取字符串,不可以读取数值类型。2、fstream 的一些操作当一个 fstream 对象被销毁时,close函数会被自动调用。// 创建一个未绑定的文件流fstream ftm01;/原创 2020-05-18 18:25:53 · 20027 阅读 · 1 评论 -
iostream输入输出流 —— cin、cout
一、cin 读取输入流cin是istream类的对象,即C++的标准输入流对象。主要用于从键盘等输入设备上读取数据。其常用的读取数据流的方法有:cin>>、cin.get()、cin.getline()1、cin>> 方式(1)、该方式每次读取数据流时,一旦遇到空格、换行符,则其后的内容都被舍弃无法读取。只能读取这些分隔符之前的内容。string s1;cin >> s1 ;cout << "s1= " << s1 << e原创 2020-05-17 22:07:05 · 2427 阅读 · 0 评论 -
IO库简介
一、 IO类1、在IO类中有三个独立的头文件,如下:iostream:定义了用于读写流的基本类型fstream:定义读写命名文件的类型sstream:定义读写内存中string对象的类型2、IO库类型和文件:头文件类型iostreamistream:从流中读取数据ostream:向流中写入数据iostream:读写流fstreamifstream:从文件中读取数据ofstream:向文件中写入数据fstream:读写文件sstreamistringstr原创 2020-05-17 20:42:59 · 1490 阅读 · 0 评论 -
C++中的 static 关键字
类有时候需要它的一些成员与类本身直接相关,而与类的各个对象之间无需保持联系,此时就可以将其声明为静态成员。静态成员属于整个类,而不是某个对象。可以通过类名来直接调用其静态成员,无需通过类的对象来进行访问。静态成员变量只存储一份供所有对象共用。1、静态成员的声明和定义class Test{public: //带默认形参的构造函数,默认的形参必须在形参列表的最后。 Test(int a=8...原创 2020-03-22 22:52:09 · 291 阅读 · 0 评论 -
范围for
基本用法1、范围for是C++11的新特性,语法如下:for(declaration:expression) statement;范围for迭代的范围是确定的,在使用的过程中无需担心下标越界的情况。可以遍历定义了begin() 和 end() 方法,且返回该方法返回迭代器的类对象。如STL中...原创 2020-03-10 16:37:56 · 651 阅读 · 1 评论 -
heap —— 堆
1、C++ STL中的 heap(堆)数据结构是一棵完全二叉树。在标准库中heap算法是在 algorithm 头文件中,提供了如下的几个操作的函数。make_heap():根据指定的迭代器区间,来创建一个堆。push_heap():把指定迭代区间的最后一个元素插入到heap中,常常和vector配合使用。pop_heap:将指定迭代区中的最后一个元素删除。sort_heap:进行堆排序...原创 2020-03-06 20:47:41 · 250 阅读 · 0 评论 -
sort() 函数的用法
sort 函数的基本知识1、sort 函数位于头文件 #include<algorithm> 中,是C++标准库中的函数。2、sort 函数原型如下,包含三个参数分别为void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);first :第一个是待排序序列的起始地址。l...原创 2020-03-08 21:20:52 · 1207 阅读 · 0 评论 -
C++中的string、char及几种类型的相互转换
一、标准库类型string标准库类型string表示可变长的字符序列1、定义和初始化string类型对象string s; // 空字符串string s1 = "hello";string s2(6, 'k'); //s2的内容是6个kstring s3(s1);2、对象的直接初始化和拷贝如果使用等号(=)初始化一个变量,实际是执行拷贝初始化,编译器把等号右边的值拷贝到新创建的...原创 2020-02-29 21:00:01 · 2161 阅读 · 0 评论 -
C ++ 中构造函数的初始化
一、关于初始化和赋值1、初始化在构造函数形参后的冒号与大括号之间的是构造函数初始值列表(即初始化的过程),大括号内的函数体为空。class TheNum{public: // 通过构造函数来对成员变量进行初始化 TheNum(int x, int y):a(x),b(y){} private: int a, b;};2、赋值此时先调用了默认构造函数,再进行赋值...原创 2019-10-29 00:05:54 · 2809 阅读 · 0 评论 -
函数形参为指向指针的指针
一、函数的形参为指向指针的指针。当链表头指针为空时,需要使用指向指针的指针。1、形参与实参间通过地址传递(1)、当头指针为空时,向该链表中添加新的节点,此时需要使用到指针的指针。InsertNode01 函数使用了指针的指针,所以其输出的结果显示以 p1为头指针的链表被成功添加了新元素。而 InsertNode02 函数则只是使用了指针,所以其结果只是相当于拷贝了数据,原来的链表并没有改变...原创 2019-10-27 01:17:39 · 2265 阅读 · 0 评论 -
C + + 内存分区模型
一、内存分为四个区:代码区、全局区、栈区、堆区。 二、程序运行前只有:代码区和全局区。1、代码区:共享和只读 2、全局区(1)、保存在全局区中的变量为:全局变量、静态变量、const修饰的全局变量、字符串常量当将一个局部变量定义成 static 时,该局部变量将会存在于整个程序的生命周期中,即使该变量所在的函数执行结束也不会对其造成影...原创 2019-06-17 17:04:55 · 512 阅读 · 0 评论 -
指针和引用的区别
一、引用:引用不是一个对象,而是给对象另起一个别名 引用在定义时,系统不会为其分配内存。 引用在定义时必须要初始化,在定义时就必须要和它的初值绑定在一起,并且整个程序运行中都不能再重新绑定到另一个对象。 引用类型的初值必须是一个对象。 int a=10;int &b=a; // 正确int &c=10; // 错误,在此引用类型不能是直接的值,必须是一个...原创 2019-10-17 07:35:27 · 131 阅读 · 0 评论 -
C++中函数返回值类型
C++中任何一个程序有且只能有一个main函数。其中main函数的返回值类型:默认主程序返回值int 。main函数返回值是返回到操作系统,给这个程序的下一个(系统)程序用,用于传递运行成功或失败等信息。被调函数的的返回值可有可无,但是当被调函数作为表达式时,必须要有返回值来返回给主调函数,此时其返回值类型可以为各种类型,如:double ,bool, int 等等。而main函数的返回值一般为i...原创 2018-06-28 17:01:59 · 6319 阅读 · 0 评论 -
vector 容器(01)—— 存放及遍历数据
一、STL简介1、STL是为了提高代码的可重复使用而产生,提供了一个标准的模板库,可供直接调用。2、为了建立数据结构和算法的一套标准,而诞生了STL3、STL从广义上可以分为:容器(container)、算法(algorithm)、迭代器(iterator)4、容器和算法之间通过迭代器进行连接。5、STL几乎所有的代码都采用了模板类或者模板函数。二、STL的六大组件S...原创 2019-07-28 16:42:18 · 1033 阅读 · 0 评论 -
C++函数模板
C++的另一种编程思想就是泛型编程,主要利用的技术就是模板。C++提供两种模板机制:函数模板和类模板一、函数模板1、建立一个通用函数,其返回值类型和形参类型不具体指定,用一个虚拟的类型来代表。语法如下:template<typename T>函数声明或定义// template :声明创建模板// typename:表明其后面的符号是一种数据类型,可以用class代...原创 2019-07-27 16:55:42 · 107 阅读 · 0 评论 -
map/multimap容器
一、基本知识1、简介map 中所有元素都是 pair (对组) pair 中第一个元素为key(键值),起到索引作用,第二个元素为 value (实值) 所有元素都会根据元素的键值(key),来自动排序2、本质map/multimap 属于关联式容器,底层结构是用二叉树实现3、优点可以根据key值快速找到value值4、map 和 multimap 的区别map 不允...原创 2019-08-08 06:44:18 · 182 阅读 · 0 评论 -
Set容器
一、基本概念1、所有元素在插入时,自动被排序。其属入关联式容器,底层结构是用二叉树实现。2、set 和 multiset 的区别:set 不允许容器中有重复的元素 multiset容器中可以有重复的元素3、基本使用#include<iostream>#include<string>#include<set>#include<al...原创 2019-08-08 06:10:20 · 200 阅读 · 0 评论 -
STL应用实例
1、需求:2、代码实现#include<iostream>#include<string>#include<vector>#include<map>#include<ctime>#define CEHUA 0#define MEISHU 1#define YANFA 2using namespace s...原创 2019-08-10 11:37:01 · 693 阅读 · 0 评论 -
STL—— 函数对象(仿函数)
一、概念1、函数对象的概念:重载函数调用操作符的类,其对象常称为函数对象。 函数对象使用重载的()时,行为类似函数调用,也叫仿函数。 函数对象(仿函数)是一个类,不是一个函数2、函数对象使用函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值 函数对象超出普通函数的概念,函数对象可以有自己的状态 函数对象可以作为参数传递#include<iostrea...原创 2019-08-10 16:24:13 · 196 阅读 · 0 评论 -
位运算符及其应用
一、常见位运算的应用:通过对数字进行移位操作,相比于乘除操作,效率要高。1、通过位运算代替取模%运算,来判断num 位奇数或偶数num & 0x1==1; // 此时num为奇数num & 0x1==0; // 此时num为偶数2、通过移位来代替乘除法(乘除数为2的幂)// 右移n位,表示 num 除以2的n次方num >> n ;// 左...转载 2019-08-20 15:26:57 · 272 阅读 · 0 评论 -
链表
一、链表简介1、链表的每个结点包含两个部分:一个是数据域,用来存放待处理的数据 一个是指针域,用来存储下一个结点的地址2、链表是一系列的结点通过指针进行连接起来的,其在内存地址中的位置并不连续,结点可以动态创建。链表不支持随机访问结点,只能从头结点逐个开始访问、遍历。3、链表的每个结点是同一种结构体类型,结点的定义如下:【注】指针域中的指针是指向下一个结点的,所以指针的类型就是...原创 2019-08-27 13:46:10 · 376 阅读 · 0 评论 -
栈数据结构
栈是一种先进后出的数据结构,可以分为:顺序栈和链式栈一、顺序栈1、其结构如下图所示:2、栈的基本操作,只有如下的五个push( ) 入栈 pop( ) 出栈 empty( ) 是否为空 top( ) 返回栈顶元素 size( ) 返回栈中元素个数 swap() 交换#include<iostream>#include<stack>...原创 2019-08-27 17:08:38 · 2248 阅读 · 0 评论 -
list容器
一、基本概念1、链表容器将数据进行链式存储。它是一种物理存储单元上非连续的存储结构,数据元素的逻辑是通过链表中的指针连接来实现的。2、链表是由一系列的结点组成的。3、结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 3、STL中的链表是一个双向循环链表:由于链表的存储不是连续的空间,所以list的迭代器只支持前移和后移,属于双向迭代器。...原创 2019-08-05 06:46:42 · 242 阅读 · 0 评论 -
deque容器
一、基本概念1、为双端数组,可以对头端进行插入和删除。2、和vector的区别 3、内部工作原理 二、函数接口:deque容器的各种接口1、deque容器的构造函数deque<T> deq; // 默认构造形式 deque(beg,end); //默认构造函数将[beg,end)区间的元素拷贝给本身 d...原创 2019-07-29 07:11:12 · 159 阅读 · 0 评论 -
const 的用法
一、常量指针和指针常量1、常量指针:指向常量的指针,指针所指的对象为常量。其常见的写法有如下两种,如:const int *p;int const *p;实例用法:int a = 10, b = 20;const int *p = &a; //定义一个指向a的常量指针p = &b; // 修改p的指向,让指针指向b// 错误,指针指向的是常量,所...原创 2019-08-27 15:05:27 · 336 阅读 · 0 评论 -
C++ 中 int main( int argc , char** argv ) 的理解
经常对int main () 、int main ( int argc , char** argv ) 、int main ( int argc , char* argv[] ) 感到很困惑。所以总结一下自己的理解。一、int main () 是一种对主函数的参数缺省的写法,也是我是在学习C++时主要用到的一种写法,自己也很习惯这种写法。二、int main ( int argc ,...原创 2019-01-12 15:48:46 · 4720 阅读 · 0 评论 -
vector 容器(02)—— vector表示的多维数组
一、vector 容器嵌套1、vector中嵌套一个vector容器,来表示一个二维数组#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;void Test01(){ vector<vec...原创 2019-02-21 20:26:02 · 3275 阅读 · 0 评论 -
Eigen库中进行矩阵间的变换
一、刚体旋转的表示方法有如下四种:旋转矩阵(R3x3) ------旋转矩阵R为正交阵(行或列向量都是两两正交的单位向量)。 四元数(Quaternion)------ 四元数可以只用四个元素就能表示旋转,在使用四元数进行旋转变换之前需要对四元数进行归一化。 旋转向量V -------也称:轴角,由一个旋转轴向量和旋转角组成。旋转轴向量需要标准化为单位向量。 欧拉角(Vector3d) ...原创 2019-01-14 21:52:08 · 1806 阅读 · 0 评论 -
C++中dll文件的生成和调用
一、将 .cpp 文件编译成 .dll 文件方法一:使用 __declspec(dllexport) 创建 dll 文件1、创建文件夹 CreatDll2、为该项目添加头文件CreatDll.hCreatDll.h 中代码如下:#pragma once#ifdef CREATDLL_EXPORTS#define CREATDLL_API __...原创 2019-05-28 15:25:48 · 5144 阅读 · 0 评论 -
vector和deque容器的实例
十个评委给五个选手打分,去掉最高分和最低分,取平均分。#include<iostream>#include<string>#include<vector>#include<deque>#include<algorithm>#include<ctime>using namespace std;class ...原创 2019-08-04 16:28:39 · 151 阅读 · 0 评论 -
stack容器
一、基本概念1、stack容器是一种先进后出的数据结构,它只有一个出口。 2、栈容器可以判断是否为空。3、stack容器提供的接口二、基本用法#include<iostream>#include<string>#include<stack>#include<algorithm>using namesp...原创 2019-08-04 17:33:01 · 111 阅读 · 0 评论 -
队列数据结构
一、队列:一种可以实现先进先出的存储结构1、队列可以分为:链式队列(动态):用链表来实现 静态队列(顺序队列):用数组来实现(静态队列通常都必须是循环队列)2、链式队列结构如下图:3、静态队列一般都是循环队列,其目的是为了能重复使用数组的内存,减少内存的浪费。 (1)、如下图所示的循环队列: front = 0 ,rear = 5 ,此时循环队列已满。如下图的队列...原创 2019-09-02 21:48:51 · 502 阅读 · 0 评论