第18章STL动态数组类

来源:互联网 发布:js 像素转换成毫米 编辑:程序博客网 时间:2024/05/17 09:30

1.std::vector

在末尾插入删除时间固定

在中间插入删除时间随数组大小而异

包含头文件<vector>

2.vector 初始化

std::vector <int> a;

std::vector <int> b(10);//大小是10

std::vector <int> c(10, 3);//是个元素,每个是3

std::vector <int> d(c);

std::vector <int> e(d.begin(), d.begin()+3);

3.插入数据

std::vector <int> a;

a.push_back(2);

a.push_back(3);

 

std::vector <int> b(3);

b[0] = 0;

b[1] = 3;

b[2] = 5;

 

vector <int> c(4, 90);

c.insert(c.begin(), 25);//把25插入到第一个位置,剩下的所有元素后移

c.insert(c.end(), 2, 33);//在最后连续插入两个33

vector <int> d(2, 30);

d.insert(d.begin()+1, c.begin(); c.end());//在d的开始位置向后一个的地方,插入c从开始到最后的元素

4.访问vector元素

vector <int> a;

a.push_back(2);

a.push_back(3);

a.push_back(4);

cout << a[2] << endl;

用这种方法可能会出现数组越界的问题,可以用at函数来代替

a.at(2);

vector <int>::iterator i = a.begin();

size_t c = distance(i, a.end());//计算从i到结尾的距离

5.删除vector

vector <int> a(3, 4);

a.pop_back();//从结尾删除一个元素

6.size capacity

size指的是vector中元素的个数,然而capacity指的是vector中最大可以保存的元素的个数。

由于vector是动态的,所以当插入的数据vector保存不下时,vector就会重新分配一块更大的内存来保存整个数组。如果vector变动比较频繁,就会导致频繁的分配内存而带来性能的影响。所以为了减少分配内存的次数,vector在增加存储空间重新分配内存时,会比需求的大小多分配出来一定的空间,来保证下次有新的元素增加的时候,不必去重新分配内存而提高效率。

vector <int> a(5,4);

a.size();//5

a.capacity();//5

a.push_back(1);

a.size();//6

a.capacity();//7

a.push_back(6);

a.size();//7

a.capacity();//7

7.deque

deque和vector很相似,只是它可以在开头和结尾插入和删除元素

deque <int> d;

d.push_back(3);

d.push_back(4);

d.push_back(5);

d.push_front(2);

d.push_front(1);

d.pop_back();

d.pop_front();

原创粉丝点击