1.c++中“->”与“.“的区别
“->”是在指针中用的;“.“是在类或者结构体变量中用的。
eg:
struct aaa
{
int a;
int b;
};
声明:
aaa t;
aaa* p;
p = &t;
t.a = 2; //这里t是变量,所以用(.)
t.b = 3;
assert(p->a == 2); //这里p是指针,所以用(->)
assert(p->b == 3);
2.c++错误:不允许使用不完整的类类型
错误原因:使用该类的文件看不到该类。
解决办法:将类的定义放到.h头文件中,在使用该类的文件中#include该头文件。
eg:在main程序中用到了一个结构体,但是代码中该结构体的定义在一个.cpp文件中,主程序只调用了该.cpp文件中的一个函数,因而在主程序文件中看不到该类。
在改之前,该被调用的函数里面用到了结构体,结构体就在该类的文件中被定义,但是返回的是一个整型变量,主程序中并没有使用该类,所以没有出现这个报错。
3.qsort的使用
(1)对结构体一级排序
struct Sample
{
double data;
int other;
}s[100]
//按照data的值从小到大将结构体排序
int cmp( const void *a ,const void *b)
{
return (*(Sample *)a).data > (*(Sample *)b).data ? 1 : -1;
}
qsort(s,100,sizeof(s[0]),cmp);
对结构体二级排序
struct Sample
{
int x;
int y;
}s[100];
//按照x从小到大排序,当x相等时按照y从大到小排序
int cmp( const void *a , const void *b )
{
struct Sample *c = (Sample *)a;
struct Sample *d = (Sample *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
}
qsort(s,100,sizeof(s[0]),cmp);
(2)对字符串进行排序
struct Sample
{
int data;
char str[100];
}s[100];
//按照结构体中字符串str的字典顺序排序
int cmp ( const void *a , const void *b )
{
return strcmp( (*(Sample *)a)->str , (*(Sample *)b)->str );
}
qsort(s,100,sizeof(s[0]),cmp);
(3)对数据进行排序
double in[100];
int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
}
qsort(in,100,sizeof(in[0]),cmp);
4.<<与>>符号
位移符号。将数字换成二进制,并且移动小数点位置。
36>>2相当于除以4;16<<2相当于乘以4.
5.wchar_t
wchar_t是C++的字符数据类型,char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,字符型无法表示。
wchar_t数据类型为16位,所能表示的字符数远超char型。
标准C++中的wprintf()函数以及iostream类库中的类和对象能提供wchar_t宽字符类型的相关操作。
#include <iostream>
using namespace std;
void main()
{
locale loc( "chs" );//定义“区域设置”为中文方式
wcout.imbue( loc );//载入中文字符输入方式
wchar_t str[]=L"中国";//定义宽字符数组,注意L是大写
wcout<<str<<endl;//显示宽字符数组,下同
wprintf(str);
system("pause");
ar_t