站在巨人的肩膀上重新学习CPP(2)
2010-08-20 10:26
295 查看
vector 模板类型
vector<T> v;
v.empty(); v.size();//元素个数 v.push_back(t);//插入元素t
可以利用[],下标操作符来实现某个具体元素的读取。但是不能用于插入新元素,智能对已存在的已知元素进行操作。
vector<int>::iterator iter;
const_iterator & const iterator
vector<t>::const_iterator 用于读取容器内元素,不能改变元素值
const vector<t>::iterator 几乎无用,应为const必须初始化,初始化后不能指向其他元素
标准库类型
bitset
#include<bitset>
using std::bitset;
bitset<32> bitvec;//32bits,初始化为0
1用unsigned初始化bitset
bitset<16> b1(0xffff); //bits 0...15 are 1
bitset<32> b2(0xffff); //bits 0...15 are 1, 16...31 are 0;
//on 32bit machine
bitset<128> b3(0xffff); //bits 0...15 are 1, 16..31 are 0, 32...127 are 0;
2用string初始化bitset
string str("1100");
bitset<32> b(str); //string的读入顺序是 从右至左,起始就是对应位置
str[0] is '1', and b[0] is 0;
str[0][1][2][3] => " 1 1 0 0"
b [0][1][2][3] => " 0 0 1 1" => b[3][2][1][0] is "1 1 0 0 ";
**********数组与指针*************
数组的维数必须是大雨1的常量表达式,并且常量表达式必须为整形,非const类型的变量不能用于定义维数
只有在强调速度的时候才使用数组和指针,尽量使用容器
显示初始化数组,可以不需要维数。
const size = 3;
int array[size] = {0,0,0};
数组不能直接复制和赋值
指针 pointer *
遇到指针变量时,可以从右边读取其意义
vector<int> * p; //p指向 int的容器类型
*指针靠变量声明,不容易误解,
string* p;//没有string*这种类型,而是指针p指向string类型,不要连续 声明指针。
使用指针一定要初始化。
* &
引用和指针,都可以间接的访问另一个变量,但是引用总是指向某个对象,必须初始化。引用的赋值,可以修改关联对象。
指向指针的指针
int **ppi;
ppi只一个32bit的值,例如0X1234ABCD,*ppi解引用ppi里面的地址,就是找到了0X1234ABCD地址所标记的内存地址。
0X1234ABCD地址里面有一个32bit的指针 0X7654fedc,所以*ppi = 0X7654fedc,这也是一个地址,最后我们可以利用**ppi找到0X7654fedc地址里面的值,他是一个int类型。
int array[] = {1,2,3,4,5};
int *p = & a[2]; //ok
int j = p[1]; //ok p[1] is *(p+1) point to array[3]
int k = p[-1]; //ok k == array[1];
const int * const point = 初始化;
从右开始读:一个不能被改变的指针变量,指向一个不能被改变的整型
动态数组
数组变量的三个重要限制:1长度固定,2编译时确定长度,3存在于定义块内
用于存放动态分配的对象:自由存储区 == 堆(heap)
C++用new 和 delete 来实现 C中的malloc和free
char a[0]; //error
char * b = new char[0]; //ok
delete [] p;
必须使用[],回收了p的所指向的数组,对于内置对象好像没什么区别,但是对于类类型的必须使用 [];
vector<T> v;
v.empty(); v.size();//元素个数 v.push_back(t);//插入元素t
可以利用[],下标操作符来实现某个具体元素的读取。但是不能用于插入新元素,智能对已存在的已知元素进行操作。
vector<int>::iterator iter;
const_iterator & const iterator
vector<t>::const_iterator 用于读取容器内元素,不能改变元素值
const vector<t>::iterator 几乎无用,应为const必须初始化,初始化后不能指向其他元素
标准库类型
bitset
#include<bitset>
using std::bitset;
bitset<32> bitvec;//32bits,初始化为0
1用unsigned初始化bitset
bitset<16> b1(0xffff); //bits 0...15 are 1
bitset<32> b2(0xffff); //bits 0...15 are 1, 16...31 are 0;
//on 32bit machine
bitset<128> b3(0xffff); //bits 0...15 are 1, 16..31 are 0, 32...127 are 0;
2用string初始化bitset
string str("1100");
bitset<32> b(str); //string的读入顺序是 从右至左,起始就是对应位置
str[0] is '1', and b[0] is 0;
str[0][1][2][3] => " 1 1 0 0"
b [0][1][2][3] => " 0 0 1 1" => b[3][2][1][0] is "1 1 0 0 ";
**********数组与指针*************
数组的维数必须是大雨1的常量表达式,并且常量表达式必须为整形,非const类型的变量不能用于定义维数
只有在强调速度的时候才使用数组和指针,尽量使用容器
显示初始化数组,可以不需要维数。
const size = 3;
int array[size] = {0,0,0};
数组不能直接复制和赋值
指针 pointer *
遇到指针变量时,可以从右边读取其意义
vector<int> * p; //p指向 int的容器类型
*指针靠变量声明,不容易误解,
string* p;//没有string*这种类型,而是指针p指向string类型,不要连续 声明指针。
使用指针一定要初始化。
* &
引用和指针,都可以间接的访问另一个变量,但是引用总是指向某个对象,必须初始化。引用的赋值,可以修改关联对象。
指向指针的指针
int **ppi;
ppi只一个32bit的值,例如0X1234ABCD,*ppi解引用ppi里面的地址,就是找到了0X1234ABCD地址所标记的内存地址。
0X1234ABCD地址里面有一个32bit的指针 0X7654fedc,所以*ppi = 0X7654fedc,这也是一个地址,最后我们可以利用**ppi找到0X7654fedc地址里面的值,他是一个int类型。
int array[] = {1,2,3,4,5};
int *p = & a[2]; //ok
int j = p[1]; //ok p[1] is *(p+1) point to array[3]
int k = p[-1]; //ok k == array[1];
const int * const point = 初始化;
从右开始读:一个不能被改变的指针变量,指向一个不能被改变的整型
动态数组
数组变量的三个重要限制:1长度固定,2编译时确定长度,3存在于定义块内
用于存放动态分配的对象:自由存储区 == 堆(heap)
C++用new 和 delete 来实现 C中的malloc和free
char a[0]; //error
char * b = new char[0]; //ok
delete [] p;
必须使用[],回收了p的所指向的数组,对于内置对象好像没什么区别,但是对于类类型的必须使用 [];
相关文章推荐
- 站在巨人的肩膀上重新学习CPP(1)
- 站在巨人的肩膀上重新学习CPP(1)
- 不重复造轮子 (find 好轮子,Learn It --- 学习站在巨人的肩膀上,才能看的更远)
- Android属性动画(三) ------ 站在巨人的肩膀上学习总结
- 站在巨人的肩膀上开发游戏(3) -- Orx 文字输出的简化及进一步学习
- 站在巨人的肩膀上学习
- 站在巨人的肩膀上---重新自定义 android- ExpandableListView 收缩类,实现列表的可收缩扩展
- 站在巨人的肩膀上学习Android开发
- 站在巨人的肩膀上学习Android开发
- 站在巨人的肩膀上--学习用例图(UML)
- Android提醒Dialog、Toast和Snackbar ---站在巨人的肩膀上学习总结
- 站在巨人的肩膀上学习Android开发
- Android属性动画(一) ------ 站在巨人的肩膀上学习总结
- 站在巨人的肩膀上学习Android开发
- 站在巨人的肩膀上好好学习SharedPreferences
- Android LayoutInflater原理分析,带你一步步深入了解View(一) ---站在巨人的肩膀上学习总结
- Android属性动画(二) ------ 站在巨人的肩膀上学习总结
- caffe学习日记--lesson8:站在巨人的肩膀上, denny的学习专栏——徐其华——caffe
- 数据挖掘学习:站在巨人的肩膀上
- Android视图绘制流程完全解析,带你一步步深入了解View(二) ---站在巨人的肩膀上学习总结