C++基础

概念

一、类和结构体的区别

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])

c/c++中sizeof()、strlen()、length()、size()详解和区别

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值