您的位置:首页 > 编程语言 > C语言/C++

站在巨人的肩膀上重新学习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的所指向的数组,对于内置对象好像没什么区别,但是对于类类型的必须使用 [];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: