代码调试时积累的知识(2)

来源:互联网 发布:python可视化窗口编程 编辑:程序博客网 时间:2024/04/30 04:38

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


0 0