前言:
vector形象来说就是一个动态数组,不用指定容量大小,它会随着你往里面添加东西,自动扩增,总是会有预留空间,即容器里面不是满的,
当你存两个元素进去时,容量会扩增到4或者5,当你存十个元素进去时,会扩增到12或者14
创建容器:
在头文件中引入:
#include<vector>
在主函数中创建容器
vector<类型> 容器命名,这里的类型可以是int,char等,看做是和创建数组类型一样int arr[ ]
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> s;
return 0;
}
vector容器的创建除了像普通数组类型int ,char等,还能创建嵌套容器,
像俄罗斯套娃一样,里面一层还一层,举例vector< vector<int> >ps;
ps这个大容器就是存放vector<int>小容器的,小容器就存放int数组元素
初始化容器:
vector容器的初始化赋值就像数组int arr[ ]一样,在创建时可以同时赋值。
vector<int> s = {1,2,3};
也可以后面使用循环来逐步往容器里添加元素。
容器和容器之间也可以用=来进行复制
vector<int> s = {1,2,3,4,5,6}; vector<int> b; b = s;
这样b容器里的值就和s容器一样了。
容器常用的几个函数:
size( ) | 返回容器的大小,里面元素的个数 |
clear( ) | 清空容器 |
font( ) | 返回容器里第一个元素值 |
back( ) | 返回容器最后一个元素值 |
push_back( 值) | 将该值加入到容器尾部 |
pop_back( ) | 将尾部的值删除 |
at( idx) | 返回idx下标的元素值,下标从0开始 |
代码演示:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> s = { 1,2,3 };
cout << "第一个元素:" << s.front() << endl;
cout << "最后一个元素:" << s.back() << endl;
s.push_back(4);
cout << "添加之后最后一个元素:" << s.back() << endl;
cout << "第二个元素值是:" << s.at(1);
return 0;
}
那么容器是如何遍历的呢?对数组int arr [ ]而言,数组名则代表元素首地址,使用for循环增加下标就可以遍历数组,其实还是指针的引用,对于vector容器而言同样是用指针来指向的。
容器则是使用迭代器来指向容器内元素的具体位置,和指针一个原理。
迭代器:
先介绍几个常见的指向位置
begin( ) | 容器内第一个位置 |
end( ) | 容器内最后一个位置 |
rbegin( ) | 逆向获取第一个位置 |
rend( ) | 逆向获取最后一个位置 |
intsert( iterator,elem ) | 在迭代器指向位置插入元素elem |
用迭代器来接收容器返回的元素位置,同样可以++和--使迭代器指向的位置移动,达到遍历容器内部元素的目的。
使用 auto 关键字简化迭代器类型声明,
auto it = s.begin();
it就相当于一个指针指向了容器的第一个位置;
要使用该位置的元素则要和指针一样用 *
vector<int> s = { 1,2,3 }; auto it = s.begin(); //打印第一个元素 cout << *it << endl; //打印第二个元素 it++; cout << *it;
使用for循环遍历容器:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> s = { 1,2,3 };
for (auto it = s.begin(); it != s.end(); it++)
{
cout << *it << " ";
}
cout << endl;
auto it = s.begin();//获取位置
s.insert(it, 8);//插入元素8到第一个位置
cout << "插入元素后容器内元素为:";
for (auto it = s.begin(); it != s.end(); it++)
{
cout << *it << " ";
}
return 0;
}
s.insert(it, 8)的意思是往it指向的位置插入8这个元素,插入后it指向的后面元素会自动往后移