C++杂记(2)
来源:互联网 发布:mac中如何切换输入法 编辑:程序博客网 时间:2024/06/05 10:54
一:explicit关键字
explicit构造函数必须显示调用,即string s1(10);不能是string s2=10;
二:const关键字
1、定义const常量
const int Max = 100;
2、便于进行类型检查
void f(const int i){} 对于传入的参数进行类型检查,不匹配的时候会做出提示。
3、可以保护被修饰的东西,增加程序的健壮性。
void f(const int i){
i = 10; //错误
}
4、类似于宏定义,可以方便的进行参数修改,不改则已,一鸣惊人。
5、为函数重载提供参考
class A{
void f(int i){}
void f(int i)const{}
}//上面为两个不同的函数。
6、可以节省空间,避免不必要的内存分配。
const定义常量只是给出了对应的内存地址,#define则是给出立即数,故const定义的常量在程序运行过程中只有一份拷贝,#define定义的常量在内存中有若干个拷贝。
7、提高效率
编译期通常不为普通的const常量分配内存空间,而将其保存在符号表中,使之成为一个编译期间的常量,减少了存储与读内存的操作。
8、示例
(1)char * const p 指针不变
(2)const char* p 指针所指向的内容为常量。
(3)void func(const char* var)参数指针所指内容为常量不可变。
(4)将参数设置为引用,可以增加效率,同时防止被修改。
如:void func(const class&var) //引用参数在函数内不可改变。
void func(const TYPE&var)//引用参数在函数内为常量不可改变。
9、const修饰成员函数
(1)const修饰类的成员函数,则该成员函数不可以修改类中任何非const成员函数
(2)const修饰成员函数最重要的作用就是限制对于const成员对象的使用
(3)const修饰的成员函数只能调用const修饰的成员函数
三:inline关键字
(1)inline必须与函数体放在一起才能是函数成为内联,仅将inline放在函数声明前不起任何作用,即inline是一种用来实现的关键字。
(2)定义在类声明之中的函数自动成为内联函数。
(3)内联函数仅仅是省去了函数调用的开销,并以代码复制为代价。因此,如果函数体内的代码较长,或者函数体内部有循环,则不宜使用内联函数。
(4)assert不是函数,而是宏。
四:c/c++头文件中#ifdef/#define/#define用法
主要作用是防止头文件被重复引用
格式如下:
#ifdef _xxx_H_ //如果没有定义_xx_H_ #define _xxx_H_ //则定义 ............. #endif //否则不用定义
五:杂记
(1)空函数不占字节
(2)未实例化的指针不占字节
(3)枚举类型占4个字节
(4)二进制表示浮点数有精度问题,0.0实际上是非常接近0的小数。
(5)编译器只要能够完成程序语言翻译成机器语言即可,所以任意的语言均可实现。
(6)在c语言中,实参和对应的实参各占用独立的存储单元
六:将csv格式图片数据转换为lmdb格式(转)
from PIL import Imageimport osimport numpy as npimport pandas as pdtrain=pd.read_csv('E:\\Kaggle\\DigitRecognition\\train.csv')trainData=train.values[:, 1:]trainLabels=train.values[:, 0]# 写入标签数据,并利用像素点填充的方法讲矩阵中的像素点采用RGB模式填入一张图片中,# R=G=B代表灰度图片file = open('E:\\Kaggle\\DigitRecognition\\label.txt', 'w')img=Image.new('RGB', (28, 28), 0x000000)img_array=img.load()for line in range(0, 42000): num=0 for x in range(28): for y in range(28): #将RGB三个分量取相等就表示灰度图 img_array[y, x] = (255-trainData[line, num], 255-trainData[line, num], 255-trainData[line, num]) num = num + 1 img.save('E:\Kaggle\DigitRecognition\\trainImages\\'+str(line)+'.jpg') file.write('E:\Kaggle\DigitRecognition\\trainImages\\'+str(line)+'.jpg' + ' ' +str(trainLabels[line])+'\n')file.close()
原理是先生成一个空的图片,然后将下载下来的csv格式数据中的每一张图片像素点依次填入到一张图像中,即得到需要的图片。
测试数据的提取代码:from PIL import Imageimport osimport numpy as npimport pandas as pdtest=pd.read_csv('E:\\Kaggle\\DigitRecognition\\test.csv')testData=test.values[:, :]img=Image.new('RGB',(28, 28), 0x000000)img_array=img.load()for line in range(0, 28000): num = 0 for x in range(28): for y in range(28): img_array[y, x] = (255-testData[line, num], 255-testData[line, num], 255-testData[line, num]) num = num+1 img.save('E:\\Kaggle\\DigitRecognition\\testImage\\'+str(line)+'.jpg')
- C杂记 (2)
- C -杂记(2)
- C杂记(1)
- c语言日常杂记2
- C 语言学习(杂记)
- C语言杂记(1)
- linux C杂记(一)
- C、C++易错知识点杂记(2)
- C杂记
- 学习杂记(2)
- 梦境杂记(2)
- C++杂记(2)
- 杂记 (2) —— linux and C
- 杂记之C语言函数getchar()
- Objective-C学习杂记(1)
- 学习杂记(一)c语言
- 学习杂记(二)c语言
- 学习杂记(三)c语言
- Android中AsyncTask面试相关知识
- oracle 11g r2 Oracle数据库在防火墙中开放1521端口的方法
- PHP
- CentOS 6.5系统安装配置图解教程(详细图文)
- table表格首列首行固定
- C++杂记(2)
- selenium 配合使用
- JDK8对并发的新支持
- docker应用-6(mysql+mycat 搭建数据库集群)
- mysql 导入 employees_db-full-1.0.6
- div内部滚动条滚动到底部和顶部
- 统计输出 图的环(c++ 有向加权图)
- CTF(信息安全夺旗赛)学习网址
- absolute、relative与float的学习