vector
一维
vector<int> a; 等同于声明了一个数组int a[ ],大小没有指定,可以实现动态的添加删除。
二维
vector <int *> a
int b = 5;
a.push_back(b); //该函数下面有详解
cout<<a[0]; //输出结果为5
函数
#include<iosteam>
#include<vector>
using namespace std;
int main(){
vector<int> v;
for(int i = 1; i <= 1000; ++i)
v.push_back(i);
}
1. push_back 在数组的最后添加一个数据
2. pop_back 去掉数组的最后一个数据
3. at 得到编号位置的数据
4. begin 得到数组头的指针
5. end 得到数组的最后一个单元+1的指针
6. front 得到数组头的引用
7. back 得到数组的最后一个单元的引用
8. max_size 得到vector最大可以是多大
9. capacity 当前vector分配的大小
10. size 当前使用数据的大小
11. resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12. reserve 改变当前vecotr所分配空间的大小
13. erase 删除指针指向的数据项
14. clear 清空当前的vector
15. rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16. rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17. empty 判断vector是否为空
18. swap 与另一个vector交换数据
vector<int> c
c.clear() 移除容器中所有数据。
c.empty() 判断容器是否为空。
c.erase(pos) 删除pos位置的数据
c.erase(beg,end) 删除[beg,end)区间的数据
c.front() 传回第一个数据。
c.insert(pos,elem) 在pos位置插入一个elem拷贝
c.pop_back() 删除最后一个数据。
c.push_back(elem) 在尾部加入一个数据。
c.resize(num) 重新设置该容器的大小
c.size() 回容器中实际数据的个数。
c.begin() 返回指向容器第一个元素的迭代器
c.end() 返回指向容器最后一个元素的迭代器
内存管理、效率
关于STL容器,最令人称赞的特性之一就是是只要不超过它们的最大大小,它们就可以自动增长到足以容纳你放进去的数据。(要知道这个最大值,只要调用名叫max_size的成员函数。)
对于vector和string,如果需要更多空间,就以类似realloc的思想来增长大小。vector容器支持随机访问,因此为了提高效率,它内部使用动态数组的方式实现的。在通过 reserve() 来申请特定大小的时候总是按指数边界来增大其内部缓冲区。
当进行insert或push_back等增加元素的操作时,如果此时动态数组的内存不够用,就要动态的重新分配当前大小的1.5~2倍的新内存区,再把原数组的内容复制过去。所以,在一般情况下,其访问速度同一般数组,只有在重新分配发生时,其性能才会下降。正如上面的代码告诉你的那样。而进行pop_back操作时,capacity并不会因为vector容器里的元素减少而有所下降,还会维持操作之前的大小。对于vector容器来说,如果有大量的数据需要进行push_back,应当使用reserve()函数提前设定其容量大小,否则会出现许多次容量扩充操作,导致效率低下。