散碎积累——C++

Mat 的clone()和copyTo()

Mat 的clone()函数是一个深拷贝函数,调用
Mat A = B.clone()
A的data会被分配新的内存
Mat的copyTo()函数也是一个深拷贝函数,但是和clone()函数有一些区别
调用B.copyTo(A)时,如果B.data指向的地址与A.data的大小类型一致,则B的地址不会被重新分配;如果不一致,则会重新分配内存

vector 的assign(),swap(),erase()

通过assign()可以为vector变量修改内容值,而把原来的值清除
例如:

A=[1,2,3,4,5,6];
B=[8,9,0];
A.assign(B.begin(),B.begin()+2)

则A=[8,9]

swap()函数是将两个vector的内容交换的函数,如果将一个vector的变量与一个对应的同种类型的空vector进行交换,则能够实现对该vector的内存的释放。
例如:

vector<double> contours2;

经过一系列的操作之后,contours2的内存会增大,但是虽然经过后续的操作,contours2的内容可能会减小,但是内存不会被释放,通过如下调用可以实现内存的释放

vector<double >().swap(contours2);

是因为,与空的vector swap()之后,内存交换后,系统会调用一个析构函数,从而将原来vector对应的内存释放掉。
通过swap()释放掉内存之后,该变量仍然可以使用,相当于一个没有分配内存的vector

为vector释放内存很有必要,我刚开始使用vector的时候没有释放内存,不仅内存会变大,而且执行类的析构函数时也会出现内存错误,就算不释放程序在控制台可以使用,但是生成的dll文件完全不能用,一调用就会出错。这时候使用swap()函数对vector进行释放就可以啦

erase()函数是删除vector中的特定内容

C++关键字:const,static

const
const:常量。创建常量的通用格式:在声明常量的时候便对常量赋值,否则该常量的值是不固定的且无法修改。

const type name=value
//例如:const int a=0;

常量被初始化之后,其值便被固定,编译器将不再允许修改该常量的值。
从上述内容,const与 define有类似之处,但是const相对于define有优势

  1. const可以明确指定的类型
  2. 可以使用C++的作用域规则将定义限制在特定的文件或函数中
  3. 可以将const用于更加复杂的类型,如数组,结构等。
    C++中基本不使用define定义符号常量,而是使用const

static
static:静态(变量,函数)。主要有两个作用:

  1. 限定作用域
  2. 保持变量内容持久化
    静态类成员有一个特点:无论创建了多少个对象,程序都只创建一个静态类变量副本,也即类的所有对象共享一个静态成员
    类中定义静态变量
class A
{
	pravite:
	static  int Month;
	int B;
	double costs[Month];
}

在使用到类的cpp中int A::Month =12;进行初始化该静态变量。
与下边的静态常量的不同之处在于,该静态变量可以改变数值,但是常量不能改变数值

A aa;
A bb;
aa.Month=13;
cout<<bb.Month<<endl;

输出也是13。

类中定义静态常量
同时,在类中声明的常量由所有的类的对象共享
例如:

class A
{
	pravite:
	static const int Month=12;
	int B;
	double costs[Month];
}

其中Month 与静态变量存储在一起,由所有A的对象共享。

类的静态成员函数

class A
{
	pravite:
	static const int Month=12;
	static int fun(int x);
}

static 在函数声明的时候使用,实现的时候不需要static的修饰。类的静态函数,是该类范畴内的全局函数,不可访问类的私有成员,只能访问类的静态成员,不需要类的实例即可调用。是一个增加了类的访问权限的全局函数

class A
 {
 public:
	 static int B;
	 int C;
	 static int fun(int a, int b)
	 {
		 return a + b;
		 
	 }
 };

调用时可以直接使用cout << A::fun(10, 10) << endl;
也可以通过类的对象:cout << aa.fun(30, 10) << endl;
同时,该函数实现的时候,不能访问类的成员。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值