头文件: < vector >
vector< T >容器是包含 T 类型元素的可自动增长容量的序列容器。也可理解为容量可变的数组。
vector 只能在尾部高效的增删元素。
vector的容量大小:
是指在不分配更多内存的情况下,可以保存的最多元素个数。
在创建vector同时不分配元素时,容量大小为0
vector的大小:
是指容器实际包含的元素个数。
vector创建:
std::vector<int> a; // 创建整型容器 a , <>中为容器类型
std::vector<double> b; //创建浮点型容器 b
std::vector<char> c; //创建字符型容器 c
分配内存比较浪费时间,所以在定义容器时就指定容量。
一、
std::vector<int> values(20); //定义 a 容量为 20, 初始默认值都为 0, 在元素个数超过 20 时,vector使用算法自动增加容量
注意:( ) 和 { } 的区别
std::vector<int> values{20}; //容量为 1,且元素值为20
//相当于初始化数组
二、
创建 vector 时,如果不想初始值为 0, 则可以用下面这条语句
std::vector<int> numbers(20, 1);
//第一个参数指定 vector 中的元素个数
//第二个参数指定所有元素的初始值,可改变; 可以是表达式计算结果,也可以是从键盘输入的数
三、
容器的大小
std::a.size(); //返回容器中元素个数
vector元素的获取:
a.begin(); //返回当前 vector 起始元素的迭代器
a.end(); //返回当前 vector 末尾元素迭代器
一、
vector 像数组一样,索引从 0 开始,通过索引获取元素。
vector 和数组一样,并不判断索引是否越界。
二、
std::cout << a.front() << std::endl; //返回容器第一个元素的值
std::cout << a.back() << std::endl; //返回容器最后一个值
因为 front() 和 back() 返回的是引用,所以可以赋值
a.front() = 20;
vector元素的增删:
一、增
a.push_back(888); //在容器末尾添加元素 888
a.emplace(888); //在容器末尾添加元素 888
emplace() 比 push_back()更有效率。
插入:
a.insert(a.begin(), 888); //在开头插入 888
a.insert(a.begin()+2, 888); //在原序列第 2 位置之前插入 888
二、删
a.pop_back(); //删除容器最后一个元素
a.clear(); //删除容器所有的元素
a.erase( a.begin()+2 ); //删除原序列第 2 位置处元素
示例:
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int> a){ //输出
for(int i=0; i<a.size(); i++){
cout << a[i] <<' ';
}
}
int main(){
vector<int> a;
vector<int> values(10);
a.push_back(0); //增加元素
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
print(a); // 0 1 2 3 4
cout << endl;
a.pop_back(); //删除元素
a.pop_back();
print(a); // 0 1 2
cout << endl;
a.insert(a.begin(), 8); //在最开始和最后插入 8
a.insert(a.end(), 8);
print(a); // 8 0 1 2 8
cout << endl;
a.insert(a.begin()+4, 3); //在原序列第 4 位置之前插入 3
print(a); // 8 0 1 2 3 8
cout << endl;
a.erase(a.begin()+4); //删除原序列第 4 位置元素
print(a); // 8 0 1 2 8
cout << endl;
a.front() = 999; //将原序列最前面元素重新赋值
print(a); // 999 0 1 2 8
cout << endl;
a.clear(); //删除所有元素
print(a); // 空
return 0;
}