short 至少16位,int至少与其一样
long 至少32位,且至少与int一样
long long 至少64位,且至少与 long 一样长
限定符:const
const int man=10;
man变量将被固定为10,且后续无法修改,和#define 意思差不多
浮点类型
注意:默认情况下,8.24和2.4E8这样的浮点类型都属于 double 类型
若希望变量是 float 类型,需要在添加 f 或者 F 的后缀,即 8.24f
类型转换
特别写法
int guess(3.999);//guess输出为3
强制转换:
(int)num; //c语言的强制转化
int(num); //C++的强制转化
static_cast<typeName> (value) ;
以下的写法是C++用于将值从一种数值类型转换为另外一种数值类型
注:string 类型 不包括在内
static_cast<typeName> (value)
如:
char num = 'Z';
int ss = 10;
cout << " " << static_cast<int>(num);
cout << endl;
cout << " " << static_cast<float>(ss);
cout << endl;
数组
基本和C差不多
定义上:
int card[4] = {1,2,3,4};
int hand[4];
short total[] = {1,1,2};
double counting[4] {1,2,3,4};//可以省略“=”
int counts[10] ={};
int count2[20] {};
字符串
标准头文件:
#include<cstring>//使得C类型的string库
#include<string>//使得string库有效
常用函数:
函数名 | 作用 |
---|---|
strlen(string) | 读字符串长度 |
cin.getline(string , 20) | 读取输入的内容的前20个有效元素存入前面string类型变量 |
cin.get(string,20) | |
getline(cin,string类型变量) | 如此使用键盘输入将直接赋值给string类型变量,且大小会自动调节 |
string类型
函数 | 说明 |
---|---|
strcpy(参数1,参数2) | 将参数2包含的字符串复制到参数1 |
strcat(参数1,参数2) | 将参数2包含的字符串接到参数1字符串的末尾 |
strlen(参数) | 求参数包含的字符串的长度 |
string类型变量.size() | 以类方法求字符串长度 |
结构体
#include <iostream>
#include <cmath> //或者math.h
#include<cstring>
using namespace std;
int main()
{//结构体
struct name_struct
{
int str1;
float str2;
string str3;
};
name_struct x1;//C++的定义写法
struct name_struct x2;//C语言的定义写法
x1.str1 = 10;
x1.str2 = 20;
x1.str3 = "xxx";
//第二种赋值方法
x2 =
{
10,
20,
"ssss"
};
//第三种赋值方法
name_struct x3 {10,20,"sssss"};
//结构体数组
name_struct x4[3]=
{
{10,20,"qqqq"},//结构体元素0
{11,22,"xxxx"},//结构体元素1
{12,23,"xixi"}//结构体元素2
};
}
还有一个叫做共用体(union)与结构体基本类似,可嵌套在struct结构中,多用于节省空间,但是在系统内存较大的地方基本用不到。
枚举类型
我反正觉的这个类型有些难理解,但是类似于结构体
枚举类型中的变量都是整型的(无法改),不对其中变量进行赋值的情况下,从第一个变量开始为0,第二个为1,依次+1;(所以是可以给枚举中的变量赋值的只是必须遵循先小后大的原则)
注:赋值时,严格遵循枚举的范围,不能超过包含变量的最大整数值
enum MyEnum
{
first,//默认为first=0
second,//默认为second=1
xxxx,//默认为2
ssss,//默认为3
aaa=10,
xooo,//默认为11
};
用法:
在阅读代码时,时常遇到整型变量用多了不知道表示什么意思的时候,枚举是解决这种问题就最为有用
enum Color
{
COLOR_BLACK,
COLOR_RED,
COLOR_BLUE,
COLOR_GREEN = 9,
COLOR_WHITE,
COLOR_CYAN,
COLOR_YELLOW,
COLOR_MAGENTA,
};
Color c1(COLOR_BLACK);
Color c2 = COLOR_BLACK;
Color c3 = COLOR_YELLOW;
cout << c1 << endl;
cout << c2 << endl;
cout << c3 << endl;
特别方便的用法:利用枚举作为switch的标签
注:这样将避免了switch没法使用字符串做标签的弊端
指针与自由存储空间
指针定义的基本
int *pl;
int xl = 20;
pl = &xl; // 将xl的地址赋值给pl指针,要知道&符号是取地址
*pl = xl; //*pl才表示pl地址上存储的内容
即:
*pl 是值,pl是地址
xl 是值,&xl 是地址
使用 new 运算符来分配内存
例:规范的指针定义语句
int *pl = new int;//规范的指针定义语句
int *pl3 = new int[10];//定义数组
意思是 new int
告诉程序,需要适合存储 int
的内存。new
运算符则是根据类型来确定需要多少字节的内存,然后找到这样的内存,并返回地址,再把地址赋给pl
,即pl是地址,*pl
是存贮在那个地址里的值;
使用 delete 运算符释放内存
delete只能用于释放 new 运算符创建的变量,可以用于节省空间
例:
int *pl = new int;//规范的指针定义语句
delete pl;
int *pl3 = new int[10];//定义数组
delete[] pl3;
这样做不会删除 pl 指针,只是为释放掉 pl 指针所指的地址
动态指针
int *p3 = new int[3];
p3[0] = 1;
p3[1] = 2;
p3[2] = 3;
cout << p3[1]<<endl;
p3 = p3 + 1;//把起始指针位置+1
cout << p3[1] <<endl;
模板类型 vector 和 array,即容器类
vector 类型使用上
包含:#include<vector>
,且它也包含在命名空间 std
中
说明:
vector 类型 与 string 类型相似,都是自动管理内存,也能同string一样根据数据大小自动设置长度,也可在末尾添加新的数据。
vector<int> num(5);//表示定义5个int模板类型的变量,这里的长度参数可以是值也可以是变量
vector<int> num_1;//设置长度为0,因为是自动调节长度的所以无所谓
注:vector的长度是在添加和插入新数据时自动调节的,但是操作需要vector的相关操作。
vector的函数 | 说明 |
---|---|
.push_back(参数) | 末尾插入数字,参数类型为int |
.insert(vector变量.begin()+i,参数2) | 插入元素,参数1(vec.begin()+i)表示在第i个元素后面插入参数2 |
.erase(vector变量.begin()+2) | 删除第3个元素 |
.erase(vector变量.begin()+i,vector变量.end()+j) | 删除区间[i,j-1];区间从0开始 |
size() | 求取vector大小 |
clear() | 清除vector的内容,清除后size为0 |
访问元素的方法与数组一样。
访问方法2 :迭代器访问(迭代器是指针):
vector<int> vec;
for (int i = 0; i < 10; i++)
{
vec.push_back(i);//末尾插入数据
}
vector<int>::iterator it;//定义一个int类型的迭代器,迭代器是指针
for(it = vec.begin(); it!=vec.end(); it++)
{
cout<<"迭代遍历:"<<*it<<endl;
}
//结果为:0,1,2,3,4,5,6,7,8,9
array 类型使用上
包含:#include<array>
,且它也包含在命名空间std
中
说明:
array 类型的使用基本和数组类似,长度固定,比数组更加方便和安全
用法:
array<int, 3> ai;//3那里只能是值,不能是变量
在给 array 和 vector 进行赋值或者访问时,可以使用成员函数at(),即:
ai.at(1)=10;
vec.at(2) = 11;