Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140812
  • 博文数量: 25
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 232
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-04 16:25
文章分类

全部博文(25)

文章存档

2019年(1)

2018年(1)

2017年(14)

2015年(9)

我的朋友

分类: LINUX

2017-08-04 16:33:10

当我们在使用数组时,总是需要在定义时指定数组的大小。但是有些时候我们却不能预先就知道到底应该

需要多大的数组。

在C++的标准库中实现一个动态的数组:vector,它和数组一样是在一段连续的内存中,随机访问的效率很高

但是vector的大小能够动态的改变,当我们需要增加数组的大小是可以调用resize(int) 函数。

vector的访问也和数组一样可以通过数组下标来访问:

vector sum;

sum.resize(10);

sum[0] = 1;

sum[1] = 2;


在标准库vector还定义很多函数:

sum.clear()         移除容器中所有数据。

sum.empty()         判断容器是否为空。

sum.erase(pos)        删除pos位置的数据

sum.erase(beg,end) 删除[beg,end)区间的数据

sum.front()         传回第一个数据。

sum.insert(pos,elem)  在pos位置插入一个elem拷贝

sum.pop_back()     删除最后一个数据。

sum.push_back(elem) 在尾部加入一个数据。

sum.resize(num)     重新设置该容器的大小

sum.size()         回容器中实际数据的个数。

sum.begin()           返回指向容器第一个元素的迭代器

sum.end()             返回指向容器最后一个元素的迭代器


在标准库中还有一个list, 它的内存空间不是连续的,是一个双向链表。随机存取的效率不是很高

但是在list中插入元素,尤其在首尾插入效率很高,只需要改变元素的指针。

list lis;

lis.push_back(1);  

lis.push_front(2); 

list<int>::iterator it; //迭代器

for(it = lis.begin();it!=lis.end();it++)

{

    printf("value:%d\n", *it);

}


在标准库中list 也定义很多函数:

assign() 给list赋值 

back() 返回最后一个元素 

begin() 返回指向第一个元素的迭代器 

clear() 删除所有元素 

empty() 如果list是空的则返回true 

end() 返回末尾的迭代器 

erase() 删除一个元素 

front() 返回第一个元素 

get_allocator() 返回list的配置器 

insert() 插入一个元素到list中 

max_size() 返回list能容纳的最大元素数量 

merge() 合并两个list 

pop_back() 删除最后一个元素 

pop_front() 删除第一个元素 

push_back() 在list的末尾添加一个元素 

push_front() 在list的头部添加一个元素 

rbegin() 返回指向第一个元素的逆向迭代器 

remove() 从list删除元素 

remove_if() 按指定条件删除元素 

rend() 指向list末尾的逆向迭代器 

resize() 改变list的大小 

reverse() 把list的元素倒转 

size() 返回list中的元素个数 

sort() 给list排序 

splice() 合并两个list 

swap() 交换两个list 

unique() 删除list中重复的元素


关于vector和list,我们只需要记住他们的原理即可(即,上面标红的部分),这样我们就能知道什么时候需要使用vector和list。 

阅读(1628) | 评论(0) | 转发(0) |
0

上一篇:linux GPIO接口的控制

下一篇:linux kill函数

给主人留下些什么吧!~~