1.vector构造函数
函数原型
vector<int> v // 默认构造,size为0
vector(const_iterator beg, const_iterator end) // 将v的[begin, end) 元素拷贝过来
vector(n, elem) // 构造函数将n个elem拷贝到本身
vector(const vector & v) // 拷贝构造
2.vector赋值操作
函数原型
vector & operator=(const vector& vec); // 重载等号
assign(const_iterator beg, const_iterator end) // 将【beg,end)区间数据拷贝给自己
3.vector容器容量和大小
函数原型
empty() // 判断容器是否为空
capacity() // 容器的容量
size() // 容器元素个数
resize(int num) // 重新指定容器的长度为num,若容器边长,则以默认值填充位置
// 若容器变短,则超过的部分被删除
4.vector数据的插入和删除
函数原型
push_back(e) // 尾部插入元素
pop_back() // 删除最后一个元素
insert(const_iterator pos, ele) // 迭代器指向pos位置插入ele
erase(const_iterator pos) // 删除迭代器指向的元素
erase(const_iterator start, const_iterator end) // 删除从start到end的元素
clear() // 清空容器
#include<iostream>
#include<vector>
using namespace std;
void print_vector(const vector<int> &v)
{for(int i = 0; i < v.size(); i++){cout << v[i];}cout << endl;
}
void test1()
{vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);v1.push_back(5);print_vector(v1);v1.pop_back();print_vector(v1);v1.insert((v1.begin()+1), 100);print_vector(v1);v1.erase((v1.begin()+1));print_vector(v1);v1.erase(v1.begin(), (v1.end()-1));print_vector(v1);v1.clear();print_vector(v1);
}
int main()
{test1();return 0;
}
5.vector数据读写
函数原型
operator[] // 返回索引idx所指的数据(因为vector的迭代器是随机迭代器)
front() // 返回容器中第一个数据元素
back() // 返回容器最后一个数据元素
6.vector互换容器
函数原型:
swap(vec) // 将vec与本身互换
实际用途来收缩内存空间
开始分配的内存空间很大,突然给把容器大部分内容删除了,但是还是会分配那么大的空间
使用v1创建一个匿名对象,实际上是拷贝构造,他只会拷贝size大小的内存。当执行完毕这行代码后,这个匿名对象就被释放掉。
vector<int>(v1).swap(v1)
7.vector预留空间
函数原型:
reserve(int len) // 容器预留len个元素长度,预留位置不初始化,元素不可访问
vector在添加元素的时候会动态扩容,它会把原来的空间释放掉,把所有的内容放到新的更大的空间里面。下面的测试代码就扩容了15次。
预留空间后,不会动态扩容,提高了运行效率。