基本数据类型
常量
- 文字常量 不可寻址 nonaddressable
- 整数型文字常量
- 20 //十进制
- 020 //八进制
- 0x14 //十六进制
- 缺省 默认有符号int
- 其他符号
- l/L long u/U unsigned f/F float
- e/E 科学计数法 1E-2
- 布尔常量
- true
- false
- 字符常量
- ‘a’ ‘2’
- null 空字符
- 特殊字符 需要加\转义
- \n 换行
- \t 制表符
- \r 回车
- ' 单引号
- \“ 双引号
- 字符前面加L代表宽字符
- L”a”
变量
变量是数据的名字的内存存储区,可以通过程序对其进行读写和处理。
变量可寻址的 addressable
左值(lvalue):地址 位置值 (location value)
右值(rvalue):被读取的值 (read value)
定义
- 类型 变量名字
变量名
- 标识符 identifier
- 特殊keyword 不能用作变量名
定义变量 是未初始化的,值是未定义是一个随机结果,一般建议初始化提供一个初始值。
内置数据类型支持构造函数
- int ival = int();
指针类型
- 指针中存有另一个对象的地址 使用*标识
1 | int *pi = 0; |
- 特殊支持 void *
- 不关心类型 只关心地址
- void *p = pi;
- 获取指向内容 *p
字符串类型
c style string:const char *
使用c style string function:
- #include <cstring>
c++ style string
- #include <string>
init
- string a = “xxx”;
- string a(“xxx”);
- string b(a); //copy a
- string b = a;
操作
- 连接
1
string c = a+b;
- 获取c style 字符串
1
const char * str = s.c_str();
- 判断空
1
2if(s.empty()){
}- 获取大小 s.size()
- 替换
1
replace(s.begin(),s.end(),',',' ')
const 限定修饰符
定义变量不可改变
1
const char * XXX_BUF_SIZE = 512;
const 对象只能赋给 const 对象指针
引用类型
引用类型 reference 有时候又称为别名 alias
1
2int ival = 1024;
int &ival2 = ival;const 引用可以使用不同类型变量初始化 一般用在函数参数上
布尔类型
- true/false
- 布尔类型可以隐式转换为int 1/0,算数值也可以,0或者空指针可以转换为false,其他类型的值可以转化为true
枚举类型
- 一些列值的集合的类型
- 比如XXX类型只能有3种类型值A,B,C
1
enum XXX{A,B,C};
- 缺省情况 每个枚举值都被默认赋值 从0开始赋值 A=0,B=1,C=2
- 也可以在声明是否制定其值
数组类型
- 下标访问/索引访问 (下标从0开始)
- 声明
- int a[10];
- 显示指定 可以不写维度
- int a[] = {0,1,2};
- 字符串类型数组
- const char c1[] = {‘c’,’p’,’p’};
- const char c2[] = “cpp”;
- c1,c2 不等价 c2 包含一个终止空字符
- 初始化
- 不能引用数组
[X] int & iar[] = {a,b,c}; - 不能数组初始化另一个数组
- int arr[] = ar;
- 不能引用数组
- 多维数组
- int a[2][3]
- 用大括号方式初始化 其值都是0
- 数组 与 指针关系
- int ia[] = {1,2,3,4};
- ia 就是数组第一个元素地址 &ia[0]
vector 容器类型
include<vector>
定义指定长度vector
- vector<int> ivec(10);
- vector<int> ivec(10 ,-1); //初始化10个元素 每个元素为-1
vector 遍历
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26if(ivec.empty()){
return;
}
for(int ix = 0; ix < ivec.size(); i++ ){
cout << ivec[i] <<endl;
}
for(vector<int>::iterator it = ivec.iterator();
it != ivec.end();
i++ ){
cout << * it <<endl;
}
```
## complex 复数
1. #include \<complex>
2. complex<double> p(0,7); //0+7i
## typedef 名字
1. 重新定义类型用于助记
typedef double score;
typedef vector
1
2
3
4
## [volatile](http://en.cppreference.com/w/cpp/language/cv)
1. 当一个对象会在编译器控制或检测之外被改变时候,如被系统时钟更新的变量,那么该对象应该被申明成volatile,编译器的优化不能应用在volatile的对象
volatile int xxx;
```
pair
- #include <utility>
- pair<string,string> author(“name”,”xxxx”);
- map 的元素