- 博客(48)
- 收藏
- 关注
原创 c++调用含json模块的python脚本
1、创建一个c++工程项目2、配置python环境变量(项目->属性:注意根据自己python 的位数选择平台,因为大多数用户在安装python的初期没有安装debug功能,所以python环境缺少python3X.lib文件,虽然可以通过修改python3X名字得到,但是容易出错,所以本文档以X64下的release配置环境)Python版本为release版本,c++项目就不能使用debug2.1、配置python安装路径下的include路径2.2、配置python安装路径下的lib
2020-10-15 22:55:56
341
原创 c++中的map和multimap集合
C++中map提供的是一种键值对容器,每一对中的第一个值称之为键(key),每个关键字只能在map中出现一次;第二个称之为该键的对应值。使用map容器需要包含头文件#include。1.四种添加元素的方法和删除元素以及遍历元素#include "iostream"using namespace std;#include "map"#include "string"//map元素的添加/...
2019-03-13 14:28:37
419
原创 c++中的set容器和multiset容器
set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。R...
2019-03-12 22:23:34
450
原创 c++中的list链表
一、List定义:List是stl实现的双向链表,与向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢。使用时需要添加头文件#include 二、List定义和初始化:list<int> lst1; //创建空listlist<int> lst2(5); //创建含有5个元素的listlist<int...
2019-03-12 20:26:13
1389
原创 c++中的queue队列以及priority_queue优先级队列
queue 模板类的定义在头文件中。与stack 模板类很相似queue 的基本操作有:入队,如例:q.push(x); 将x 接到队列的末端。出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。访问队首元素,如例:q.front(),即最早被压入队列的元素。访问队尾元素,如例:q.back(),即最后被压入队列的元素。判断队列空,如例:q.empty(...
2019-03-12 19:53:54
298
原创 C++中的stack栈
C++ Stack(堆栈)是一个先进后出(FILO)的数据结构,只允许对容器的一端进行操作,先入栈的后出栈,只能对栈顶元素可以操作,不能对栈顶元素之后的元素进行操作(查看、修改、删除),增加元素也只能在栈顶增加。基本操作函数:1.empty() 堆栈为空则返回真2.pop() 移除栈顶元素3.push() 在栈顶增加元素4.size() 返回栈中元素数目5.top() 返回栈顶元素入...
2019-03-12 19:37:59
395
原创 c++的双端队列deque
deque 即双端队列。是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。实例代码#include "iostream"using namespace std;#include "deque"//双端集合,可以从两头插入数据,并以插入顺序排列void print(deque<int> baby){ for (dequ...
2019-03-11 21:38:18
984
原创 c++中vector容器详解
vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素...
2019-03-11 21:24:36
2721
原创 string详解
标准库类型string表示可变长的字符序列,为了在程序中使用string类型,我们必须包含头文件: #include 1.assign() ,用于赋予新值2.swap() ,交换两个字符串的内容3.+=、append(不能追加字符)、push_back(只能追加字符)、insert(指定位置,插入元素) ,添加元素4.erase()、clear()、~string() ,删除...
2019-03-11 19:52:06
199
原创 容器算法迭代器入门
容器:c++帮我们创建了许多可以直接使用的类,这些类可以存储各式各样的元素,包括普通类型、指针型、自定义对象等等都可以存储算法:算法就是将一个个方法集成,可以直接使用这些方法去方便我们的日常使用、优化代码简单的介绍容器的迭代器(iterator迭代器就相当于一个for循环,他的迭代器对象是一个位置指针)和vector容器存储元素特别注意一点:当容器用来存指针的时候,it就变为二级指针,(*...
2019-03-10 21:44:58
128
原创 c++的文件输入与输出
#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;#include "fstream"//文件操作需要包含fstream头文件void main18(){ //输出流的类名为ofstream out file stream(输出流是将内容输出到文件中) ofstream fileO...
2019-01-30 14:43:51
277
原创 c++标准的IO输入流
在c中可以使用scanf()来接收键盘输入的数据,而在c++中有cin这样的标准输入流来处理键盘数据读取工作标准输入流对象cincin.get() //一次只能读取一个字符cin.get(一个参数) //读一个字符cin.get(三个参数) //可以读字符串cin.getline() //接收字符串(包括空格)cin.igno...
2019-01-30 14:35:38
145
原创 c++的异常抛出与异常处理
1 发生异常之后,是跨函数 :2 接受异常以后 可以不处理 再抛出异常3 catch异常的时 按照类型进行catch4 异常捕捉严格按照类型匹配c++利用try和catch捕获并处理异常,在python中利用try和except进行异常的处理与捕获void divide(int x, int y){ if (y == 0) { throw x; //抛出 int类型 异常 }...
2019-01-30 14:04:30
2871
原创 c++与c的数据类型转换
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)aC++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。 static_cast 静态类型转换 如int转换成charreinterpreter_cast 重新解释类型 (强制转换类型)dynamic_cast 动态类型转换 如子...
2019-01-30 11:31:42
309
原创 c++自定义的容器实现
通常我们使用的int、char等数据类型可以创建数组去容纳数据,其实我们自定义的类也能够像基础类型一样去创建容器容纳各种数据。包括基础数据类型、自定义的类对象、以及对象指针等等数据创建类对象的头文件#pragma once#include "iostream"using namespace std;template <typename T>//泛型编程,可以使类存储任意形...
2019-01-29 16:54:15
3130
原创 类模板的定义与继承实现
c++是面向对象的编程语言,固然避免不了对类使用泛型编程,以简便编程以下内容包括:1.单个类模板的用法2.从模板类派生(继承)普通类3.从模板类派生(继承)模板类4.模板函数——所有函数体都写在模板类的内部5.模板函数——所有函数体都写在模板类的外部6.模板函数——所有函数体都写在模板类的外部(类的声明与实现分开)1.单个类模板的用法1.1 在类的开头定义模板1.2 创建类对象...
2019-01-29 16:36:43
792
原创 函数模板与重载时的调用规则
对于这种 1.函数的业务逻辑一样 2.函数的参数类型不一样 的多次重复型函数,为了节省开发工作,提出泛型编程泛型编程:即用template定义一个泛型T,用它来统代类型全文内容包括以下几点:1.泛型函数的基础2.函数模板的强化(数组的泛型应用)3.函数模板与函数重载4.函数模板云函数重载相遇时的调用规则1.泛型函数的基础1.1函数模板分为显示调用和隐式调用,即主动地声明模板函数...
2019-01-29 15:11:28
646
原创 c++中字符串与字符数组的互相转换
在c++中与python不一样,python中使用print()可以输出任意类型的数据,但是c++不一样,c++对于数据格式要求更为严格,有时候输出就只能以字符输出,而不能用字符串输出void main(){ //字符串转字符数组 string name = "哈哈哈哈"; char buf[] = {0}; strcpy(buf , name.c_str());//字符串转字符数组,...
2019-01-29 14:17:46
31959
6
原创 c++面向抽象类(接口)编程及多继承接口编程
面向抽象类编程(面向一套预先定义好的接口编程):1.其实就是不同模块的解耦合,2.其本质是:就相当于以前的同名函数问题,子类和父类存在同名函数,必须用virtual关键字修饰,使其可以具备多态性质,但是现在将父类中的同名函数=0,构成了纯虚构函数#include <iostream>using namespace std;class Interface1//接口1//也叫抽象...
2019-01-15 22:49:35
343
原创 c++继承类中的同名成员变量和同名成员函数
在两个有继承关系的类中,出现了没有使用虚函数重写的同名函数,称此函数为重定义函数,同样还有重定义变量。在子类对象调用函数和赋值时,为了区分调用的函数和变量,通常使用域名作用符区分,如果不加作用域符,默认情况下谁的类声明的对象调用各自的函数和变量#include &lt;iostream&gt;using namespace std;class A{public: int a; int...
2019-01-14 22:26:21
1851
原创 c++函数的重载重写和重定义
重写 重载 重定义:1.重写发生在2个类之间,两个类之间有继承关系,出现同名的函数重写分为2种情况:a. 虚函数重写 将发生多态 加virtual关键字b. 非虚函数重写 (重定义) 不加virtual关键字2.重载必须在一个类之间,函数的重载就是函数名一样,参数列表不一样(类型、个数)#include &lt;iostream&gt;using na...
2019-01-14 22:18:00
873
原创 c++的虚析构函数
想通过父类指针 把所有的子类对象的析构函数都执行一遍释放所有的子类资源,就需要使用虚析构函数#define _CRT_SECURE_NO_WARNINGS#include &lt;iostream&gt;using namespace std;//虚析构函数class A{public: A() { p = new char[20]; strcpy(p, "obja")...
2019-01-14 22:04:11
131
原创 c++的多态(一个接口,多种实现)
为什么要使用多态?为了解决同一段代码在不同的对象调用时有不同的效果,避免了代码的冗余实现多态的三个条件:1 要有继承2 要有虚函数重写3 用父类指针(父类引用)指向子类对象…#include "iostream"using namespace std;class animal{public: virtual int eat() { return 10; }};cla...
2019-01-14 21:55:43
1866
原创 c++继承中的构造与析构
继承中的构造顺序:先调用父类构造函数 再调用 子类构造函数继承中的析构顺序:析构的顺序和构造相反(先析构子类对象,再析构父类对象)1、子类对象在创建时会首先调用父类的构造函数2、父类构造函数执行结束后,执行子类的构造函数3、当父类的构造函数有参数时且没有无参构造函数时,需要在子类的初始化列表中显示调用(在类的组合使用中,也涉及到初始化列表的使用,不同的是,组合类已经声明了另一个...
2019-01-14 21:10:06
239
转载 c++字符串类的操作符重载
类的头文件:#pragma once#include "iostream"using namespace std;class mystring{public : mystring(); mystring(char *p); mystring(const mystring&amp; obj); ~mystring();public: char&amp; operator[](...
2019-01-14 20:41:44
330
原创 c++、opencv、python中计算程序运行时间
在c++中计算程序运行时间需要包含"time.h"头文件void main(){ clock_t startTime = clock();//clock_t数据类型在源码中定义:typedef long clock_t;即为长整型数据,所以可以使用double直接代替clock_t /* 程序块 */ clock_t endTime = clock();//clock()函数为获得...
2019-01-14 20:29:09
501
原创 c++数组类的操作符重载(数组的形成原理浅理解)
数组类的操作符重载的.h头文件:#pragma once#include &lt;iostream&gt;using namespace std;//先定义一个数组类,并对成员函数、构造函数、重载操作符函数进行声明class Array{public: Array(int length);//有参构造函数 Array(const Array&amp; obj);//copy函数...
2019-01-09 10:23:40
401
原创 c++的左移右移操作符重载
重载左移右移操作符的意义:对于自定义类型的变量,c++编译器只能编译输出基础类型变量,所以想要输出自定义类型的对象元素就需要重载输出流操作符操作符的重载一般情况下是使用成员函数进行重载,在一些特殊情况不能使用成员函数重载就需要用友元函数进行重载(全局函数),例如:左移右移操作符注意:重载函数的返回类型应该是cout类型(ostream&amp;amp;)或者cin类型(iostream)#inclu...
2019-01-08 22:52:46
681
原创 c++解决对象浅拷贝问题之(重载等号操作符和手工编写copy构造函数)
C++编译器提供的 默认的copy构造函数 属于浅拷贝(所以需要重写copy构造函数)C++编译器提供的 等号操作= 也属浅拷贝(所以需要重载等号操作符)重载 等号操作=三步骤:1.先释放接收者旧的内存2.根据传递者的内存大小分配接收者的内存大小3.将传递者的数据拷贝给接收者#define _CRT_SECURE_NO_W...
2019-01-08 22:41:39
406
原创 c++的运算符重载
运算符重载的意义: 因为c++是面向对象的编程语言,当两个对象需要进行一系列的运算符操作时就不能像普通的数据类型一样进行简单的运算符操作,这时候就需要将运算符进行重载,让对象的成员变量按照意愿进行运算,这样才能使运算正确进行。全局函数、类成员函数方法实现运算符重载步骤:1)要承认操作符重载是一个函数,写出函数名称 opera...
2019-01-08 22:19:28
173
原创 c++类的友元函数
友元函数的意义有三点:1.友元类的声明:1.1两个独立的类A、B,在A中声明了友元类B,那么B类对象就可以访问A类的私有成员、私有函数1.2在B类中有内部类C,想要访问C或者对C进行的一系列操作都需要在类B中(C类外部)将C声明为友元函数2.友元函数的声明:将全局函数在类中声明成由友元函数,那么全局函数就可以访问A类的私有成员、私有函数#include &lt;iostream&gt;u...
2019-01-08 21:51:52
1197
原创 对象调用成员函数时原理剖析以及成员函数有const修饰的情况
在c++中和c语言中,对于const修饰的指针,const的位置不同,约束的内容也不一样:const int *p;const修饰的是指针p指向的内存空间(使这片空间的变量只拥有可读属性)int const *p;const修饰的是指针p的内存内容不可修改(不能用指针再传递其他变量)int * const p;const修饰的是指针p的内存地址不可更改(不能用指针再接受其他地址)在c...
2019-01-08 20:58:54
382
原创 c++中的内存分配(new)与释放(delete)和c中的内存分配(malloc)与释放(free)
c语言的操作符: malloc freec++的操作符: new delete 相同 和 不同的地方: new能执行类型构造函数 delete操作符能执行类的析构函数 而malloc和free不可以分配基础类型void main(){ int *p = (int *)malloc(sizeof(int));//给指针分配一块(int)大小的内存地址 *p = 10...
2019-01-07 22:34:41
2436
原创 c++构造函数的初始化列表
解决的问题1: 在B类中 组合了一个 A类对象 (A类设计了构造函数)(根据构造函数的调用规则 设计A的构造函数, 必须要用;但是没有机会初始化A)解决的问题2: 为const常量赋值(const常量需要在类中赋值,而静态成员变量需要在类的外部用作用域符(类型 类名::变量名=?)进行赋值)构造函数的初始化列表有严格的构造顺序和析构顺序:先执行 被组合对象的构造函数 (即构造对象A)(如果组合...
2019-01-07 22:18:24
637
原创 c++的构造函数
c++的类中包含以下三种构造函数:1.无参的构造函数 : 类名()2.有参的构造函数 : 类名(形参)有参构造函数的三种调用方法:2.1 括号法2.2 等号法2.3 手动的调用构造函数3.赋值构造函数 (作用:用一个对象初始化另外一个对象): 类名(const 类名&amp;amp;amp;amp;amp; obj)赋值构造函数四种调用场景: 3.1 用一个对象去初始化另外一个对象(使用等号)3...
2019-01-07 22:04:31
179
原创 类的封装和访问控制
封装有2层含义:1 . 把属性和方法进行封装 (对成员变量和成员函数进行封装,就是把这两个放在类里面)2 . 对属性和方法进行访问控制(通过public、private、protected对成员函数和成员变量进行封装,以达到访问限制)public: 修饰的成员变量和函数 可以在类的内部和类的外部访问private: 修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问pro...
2019-01-05 22:20:43
379
原创 函数指针的基础语法
函数指针的3个基础用法:1.声明一个函数类型2.声明一个函数指针类型3.定义一个函数指针变量#include &amp;amp;quot;iostream&amp;amp;quot;using namespace std;void myfunc(int a){ printf(&amp;amp;quot;a:%d \n&amp;amp;quot;, a);}void myfunc(char *p){
2019-01-05 22:01:16
299
原创 c++函数重载
当函数名相同时会出现调用歧义,所以这时候需要使用函数重载来避免调用歧义。但是函数重载有一定的标准,如下:#include "iostream"using namespace std;/* 函数重载的标准: 1.当相同函数名和不同的参数搭配在一起的时候,函数的意义是不一样的 2.当函数名称相同而参数不一样的时候(参数的个数、类型),这是函数的重载 3.返回值的类型不能作为函数重载的判断...
2019-01-05 21:32:17
117
转载 二级指针与指针的引用做函数参数
在“c++的引用”中已经介绍了一级指针(p)与引用(&amp;amp;p)做函数参数的使用情况(目的是为了将变量的地址传递给调用的函数),现在介绍一种更为复杂的情况。即函数参数是二级指针(**p)(指向指针的指针)与函数参数是指针的引用(&amp;amp;p)这两种情况(目的是为了将一级指针的地址传递给调用的函数)。#include &quot;iostream&quot;using namespace std;//定义类.
2019-01-05 20:58:04
839
原创 python的if、else、while、for
1.对于判断语句if—else—elif、循环语句for—while等,在python中,不像c++一样需要用{ }去包含子集;在python中使用冒号:开始,结合缩进符来包含子集2.在c++中,条件判断用()来包含;在python中取消了条件判断的括号直接在关键字之后 加一个空格符再添加判断语句3.c++中的bool值为true,python中True中的T应该大写4.与c++的for循环...
2019-01-04 13:54:22
468
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人