站在巨人的肩膀上重新学习CPP(2)

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的所指向的数组,对于内置对象好像没什么区别,但是对于类类型的必须使用 [];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值