第 3 章 数据类型

来源:互联网 发布:java开发eclipse版本 编辑:程序博客网 时间:2024/04/30 15:58

第 章 数据类型

1.内置数据类型的长度、默认类型(有符、无符)有编译器决定,不是c++标准。各编译器对整数字面值的长度限制不同,超过一定规定长度报错,未超规定长度但超出表示范围,虽合法但不合理。同样程序在不同编译器上编译出的指令不同。

2.  (1)表示成无符或长整要在整数字面值后加UL,大小写均可。如:b=012345Lc=235u

2)浮点数字面值默认为double型,要表示成float则需在浮点数后面加Ff

3.取余运算的正负性取决于被除数的正负性,被除数正则余数正,被除数负则余数负:

11 %-5= 1; -11 %-5= -1

4.ASCII128个,其中33个(0——31127)不可见的控制字符。转义字符可以表示不可见字符:

/t:水平制表符 /v:垂直制表符 /r:回车 /n换行 /a:响铃 /ddd:1-3位八进制数 /xhh:1-2位十六进制数

5.枚举型:

    (1)枚举型enum Week{Mon,Tue,Wed,Thu,Fri,Sat,Sun};默认时,第一个对应整数:0,一次类推。

枚举值虽然对应整数,但枚举变量却不能取整数值,只能通过强制类型转换:

Week week = 0; //wrong. week = Mon;week = Week(0);//right.

    (2)枚举符作为整形数的一个子集,可以直接参与整数能享有的所有运算,而且可以脱离枚举变量的定义使用

enum Week{Mon,Tue,Wed,Thu,Fri,Sat,Sun}; if(a == Mon) cout << "monday./n";

3)进入函数调用或其他模块时,常量需要初始化,而枚举无需定义其实体,可直接使用枚举符,代替常量使用。

6.布尔:默认输出形式为0/1,要输出true/false,需加控制符:cout << boolalpha<<d<<endl;

7.C-strig & string

C-串是字符串字面值,以一个全0位字节作为结束符。C-串长度为字符串长度加1C串类型为const char*

8.字符指针&字符数组

    (1)指针表示内存空间位置,输出字符指针的间接引用(*str)就是输出单个字符,输出字符指针就是输出C串。

char * str = "hello";

cout << *str <<endl; //h

cout << str <<endl; //hello

    (2)数组不能复制:

char a1[6] = "hello";

//char a2[6] = a1; //错,数组是不能复制的

(3)c串操作,默认在string.h中,标准c++中,iostream包含了它:

char * s1 = "hello"; 

char * s2 = "123";

char a[20];

strcpy(a,s1); //复制

cout << (strcmp(a,s1) == 0 ? " " :"not " )<< "equal." <<endl; //比较

cout << strcat(a,s2) << endl;//连接

cout << strrev(a) <<endl; //倒置

cout <<strset(a,'c') <<endl;//设置

cout << (strstr(s1,"ell") ? " " : "not ") << "found" <<endl;//查找字符串

cout << (strchr(s2,'c') ? " " : "not ") << "found" <<endl;//查找字符

9.string

(1)string操作:

string a, s1 = "hello ";

string s2 = "123";

a = s1; //复制

cout << (a == s1 ? " " : "not ") << "equal." <<endl;

cout << a + s2 <<endl; //连接

reverse(a.begin(),a.end()); //倒置

cout << a <<endl; 

cout << a.replace(0,9,9,'c') <<endl; //替换

cout << (s1.find("ell") != -1 ? " " : "not ") << "found." <<endl; //查找字符串

cout << (s1.find('c') != -1 ? " " : "not ") << "found." <<endl; //查找字符

(2)cin 将前导空格(空格、回车、水平或垂直制表符)滤掉,读入单词,遇到空格结束.

         getline总是将末行的回车符滤掉.

10.数组

1int array[5] ={}; //error! 初始值不能为空

2int array[5] ={0};//若果初始个数不等于数组大小,则后面全部补零;

3int a[]; //error

4int a[] ={1,2,3}; //ok

for(int = 0; i < sizeof(a) /sizeof(a[0]);i++) //sizeof(a) 表示数组的字节数

sizeof(a) /sizeof(a[0])而直接用数组的大小的原因: 增加了代码的通用性,当a的类型或大小变化时,此代码不变。

(5)初始化方式:

char ch1[4] ={"leo"}; //'/0'结束

char ch2[3]={'l',''e,'o'};

char ch3[4]="leo"; //'/0'结束

(6)全局数组和静态数组默认值为0,局部数组默认初始值不确定。

11.向量

(1)vector<int>d(b.begin(),b.begin()+3); //定义向量d,其值以此为b中的0~2(共3个)元素的值。

(2) 遍历:

for(int i = 0; i < a.size(); i++) cout << a[i];

for(vector<int>::iterator it =  a.begin(); it !=  a.end(); it++) cout << *it;

(3) capacity:供扩展之用的未用元素个数

vector<int> vec3(10);

vector<int> vec4;

cout <<vec3.size()<<endl; // 10

cout <<vec3.capacity<<endl; // 1

cout <<vec4.size()<<endl; // 0

cout <<vec4.capacity<<endl; //1

(4)向量常用操作

vec5.assign(vec.begin(),vec.begin()+4);//赋值

vec5.assign(4,2);

int x = vec.back();//尾元素

int y = vec.front();//首元素

vec6.push_back(5);//末尾插入

vec6.pop_back();//删除末尾元素

vec6.resize(10);//调整个数,多删少补

vec6.resize(10,2);

if(!vec6.empty()) cout << "not empty!"<<endl;//判空

vec6.clear();//清空,不再有元素

if(vec6.empty()) cout << "empty!"<<endl;//判空

cout <<vec3.size()<<endl; //10

cout <<vec3.capacity<<endl;// 1

cout <<vec4.size()<<endl;// 0

cout <<vec4.capacity<<endl;// 1

if(vec1 == vec) cout<<"equal!"<<endl; //比较

for(int i = 0; i < vec1.size(); i++)//遍历

cout << vec1[i] <<" ";

cout <<endl;

for(vector<int>::iterator it = vec2.begin(); it != vec2.end(); it++)//遍历

cout << *it <<" ";

12 指针

(1)指针类型转换

类型转换的目的是要逃避编译的类型检查,以使不能完成本任务的模块能凑合着使用。

三种转换方式:a. int * p = reinterpret_cast<int>(&f); b. static_cast<type>(exp) c.const_cast<type>(exp)

(2)指针+整数 指针,指针-整数=指针,指针-指针=整数

(3)利用指针遍历数组

int iArray[6];

for(int i = 0; i<6; i++)

iArray[i] = i * 2;

for(int *p = iArray; p<iArray+6; p++)

cout<<p<<": "<<*p<<endl;

(4)指针常量和常量指针

指针常量与指针变量相对,也就是指针的值不能改变。常量指针是指向常量的指针。Const修饰指针则为指针常量,

修饰指向的实体类型,则为常量指针。指针常量不能修改指针值,但可以修改指向的实体;常量指针可以修改指针值,但不可以修改它所指向的实体的值。常量指针常量既不能修改指针值,也不能修改它指向的实体的值。

const int * p = &a; //常量指针

int * const cp = &b;//指针常量

 int const * ip = &b;//指针常量

 const int * const dp = &b; //常量指针常量

13 引用

(1)引用定义时必须初始化 int & rint = someInt;

(2)引用只能改变它所关联的实体的值,但不能改变它本身的值。

(3)int int1 = 5;const & rInt = int1; const 为了阻止rInt 做写操作,但不妨碍实体值被改变,如:int1 = 8

(4)高级编程多用引用,低级编程多用指针。