草履虫都能看懂的C++STL快速入门(一)vector 常用操作
文章目录
一、vector的理论部分
- vector底层数据结构是数组(顺序表)
- 访问/更改 元素的时间复杂度是O(1)
- 插入/删除 元素的时间复杂度是O(n)
- vector的自动扩容: 当通过push_back向其中增加元素时,如果初始分配空间已满,就会引起vector扩容,其扩容规则在gcc下以2倍方式完成:
(1)首先重新申请一个2倍大的内存空间;
(2)将原空间的内容拷贝过来;
(3)将原空间内容进行释放,将内存交还给操作系统
二、vector的基本操作
1. vector所在的头文件
#include<vector>
2. 初始化vector
- 如果using namespace std了就不用加上前面的std::
<>
是指vector中元素的类型, 可以是int等基本数据类型, 也可以是自己写的类, STL类, 什么类型都能装{}
是C++11语法的列表初始化, 如果你的编译器版本低那么不要使用
(1)指定每个元素
std::vector<int>v{1, 2, 3, 4};
(2)指定长度
std::vector<int>v(10);
//生成长度为10的数组
(3)指定长度与内容
std::vector<int>v(10, 5);
//生成长度为10的数组,里面元素都是5
(4)通过已有vec来创建
std::vector<int>v2(v); // 全复制进来
std::vector<int>v2(v.begin(), v.begin()+3); // 复制v前4个
(5)二维数组
std::vector<std::vector<int> >v_dim2; // 不要漏掉尖括号里的空格, 不然报错
3. vector元素访问
(1) 迭代器
迭代器是一种安全的访问控制器,它本身是一种指针,用于元素访问。STL容器遍历访问的大致思路是,创建容器的迭代器,让迭代器指向第一个元素,逐步向后移动并最终指向最后一个元素结束。
遍历代码
vector<int> v;
vector<int>::iterator it; //C++98标准
for(it=v.begin();it!=v.end();it++){
cout<<*it<<' ';
}
(2)下标访问
for(int i=0;i<v.size();i++){
cout<<v[i]<<' ';
}
4. 插入与删除
(1)向量尾插入push_back()
在向量的末尾添加一个新元素val,并自动让容器大小增大一个。
函数原型:
void push_back (const value_type& val);
使用举例:
v.push_back(10); //插入一个数据10
(2)向量尾删除pop_back()**
移除向量尾的最后一个元素,并且将容器大小减小一个,
函数原型:
void pop_back();
使用举例:
v.pop_back();
(3)插入insert()**
插入元素到指定位置,通过在元素之前在指定位置插入新元素来扩展向量,从而有效地增加容器大小所插入的元素数量。
函数原型:
插入单一数据到指定位置:
iterator insert (iterator position, const value_type& val);
插入一段数据到指定位置:
void insert (iterator position, size_type n, const value_type& val);
插入一段别的容器的数据到指定位置:
template
void insert (iterator position, InputIterator first, InputIterator last);
使用举例:
v.insert(v.begin(),10); //在向量最前端插入数据10
v.insert(v.begin(),5,20); //在向量最前端插入5个数据20
vector<int> k(2,50); //创建一个新的向量k,其拥有2个元素内容均为50
v.insert(v.begin(),k.begin(),k.end()); //在向量v最前端插入向量K的全部内容
(4)删除erase()
删除一个元素,或者是一段区间的元素,将会自动缩减空间使用。
函数原型:
iterator erase (iterator position);
iterator erase (iterator first, iterator last);
使用举例
v.erase(v.begin()); //删除第一个元素
v.erase(v.begin(),v.begin()+4);
(5)清空clear()
将向量中所有元素清空。
函数原型:
void clear();
使用举例:
v.clear();
5. 向量长度
数据大小size()
返回向量中的数据元素个数。
函数原型:
size_type size() const;
使用举例:
cout<<v.size()<<endl; //输出5