分类: 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。