概念
一、类和结构体的区别
1.结构体是一种值类型,而类是引用类型
值类型用于存储数据的值,引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,类则通过引用来对实际数据操作。
2.结构使用栈存储,而类使用堆存储
栈的空间相对较小,但是存储在栈中的数据访问效率相对较高
堆的空间相对较大,但是存储在堆中的数据的访问效率相对较低
3.类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装
结构体不具备类的继承多态特性
4.结构体赋值是直接赋值,而对象的指针赋值是对象的地址
如何选择结构还是类?
1. 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
2. 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
3. 在表现抽象和多级别的对象层次时,类是最好的选择
4. 大多数情况下该类型只是一些数据时,结构体最佳的选择
知识点1 :string、char *、char[]的转换
一、string转char*。
主要有三种方法可以将string转换为char*类型,分别是:data(); c_str(); copy();
//方法1
string str = "hello";
const char* p = str.data();
//方法2
string str=“world”;
const char *p = str.c_str();
//方法3
string str="hello,C++";
char p[50];
str.copy(p, 5, 0);//这里5代表复制几个字符,0代表复制的位置,
*(p+5)=‘\0’;//注意手动加结束符!!!
二、char * 转string。
可以直接赋值。
string s;
char *p = "hello";//直接赋值
s = p;
说明,当声明了string类型变量s后,用printf("%s",s);是会出错的,因为“%s”要求后面的对象的首地址。但是string不是这样的一个类型。所以肯定出错。
三、string转char[]
string pp = "pfjpfj";
char p[8];
int i;
for( i=0;i<pp.length();i++)
p[i] = pp[i];
p[i] = '\0';
printf("%s\n",p);
四、char[]转string
可以直接赋值
char chs[] = "hello";
string s = chs;
五、string的startWith和endWith
bool startWith(string s, string sub){
return s.find(sub) == 0 ? 1 : 0;
}
bool endWith(string s, string sub){
return s.rfind(sub)==(s.length() - sub.length()) ? 1 : 0;
}
五、FILE操作
1.uchar*数据写入sd卡
// 二进制数据写入
FILE *file = fopen("sdcard/hello.txt", "wb+");
fwrite(oriImgBuffer, 1, h_in * w_in * 3, file);
fflush(file);
fclose(file);
// float*写入
FILE *file = fopen("sdcard/1.txt", "w+");
for (int i = 0; i < 3 * 416 * 416; ++i) {
fprintf(file,"%f\n", data[i]);
}
fflush(file);
fclose(file);
2.读取sdcard文本数据到uchar*
//1.提前知道文件长度
FILE *file = fopen("sdcard/hello.txt", "rb");
fread(oriImgBuffer, 1, h_in * w_in * 3, file);
fflush(file);
fclose(file);
//2.不知道文件长度
FILE *file = fopen("sdcard/hello.txt", "rb");
int size = 0;
if(file){
fseek(file,0,SEEK_END);//指针指向结尾,偏移量0
size = (int)ftell(file);//文件首到指针位置的偏移字节数
rewind(file);//指针重新指向首地址
}
char *res = new char[size];
fread(res, 1, size, file);
fflush(file);
fclose(file);
获取当前时间值
long getCurrentTime() {
struct timeval tv;
gettimeofday(&tv, NULL); //在sys/time.h头文件中
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
附:
float[] f元素个数
n=sizeof(f) / sizeof(f[0])