目录
vector的定义
vector也叫“变长数组”,即长度根据需求进行改变的数组,是属于容器中的一种数据结构。其原理是将原数据拷贝在一块新空间上实现动态变化。
vector常见的初始化方法
1.使用花括号直接赋值
vector<int> v{ 1,2,3 };
2.使用圆括号进行赋值
vector<int> v(5, 8); //初始化5个值为8的元素
for(auto i : v) cout << i << " "; //输出8 8 8 8 8
vector访问元素方法
1.通过下标进行访问
vector<int> v{ 1,2,3 };
cout << v[0]<<endl;
这里V[0]表示动态数组的第一个元素,当然最后一个元素为v[2]=3,并且需要注意的是v.begin()指向的是v[0],而v.end()则是指向的是最后一个元素的下一个位置
2.通过迭代器访问元素
迭代器(iterator)可以看作是一种类似指针的东西
vector<typename>::iterator it;
其中typrname表示存储的数据类型,如int/double,通过上面定义得到迭代器it从而去访问vector里的元素
#include<vector>
#include <iostream>
using namespace std;
int main() {
vector<int> v;
v.push_back(1); //依次输入1、 2、 3
v.push_back(2);
v.push_back(3);
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
system("pause");
return 0;
}
其中对一个vector常见的遍历输出方式为
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
常见的vector函数
1.push_back(元素)
在现有的容器后添加一个元素
2.pop_back()
删除尾元素
3.size()
获取vector中元素个数
vector<int> v{1,2,3};
cout<<v.size();
4.clear()
清楚vector容器中的所有元素
5.insert(位置,元素)
在某个位置插入某个元素
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> v;
for(int i = 1; i <= 5; i++){
v.push_back(i); //将1、2、3、4、5 依次插入v的队尾
}
v.insert(v.begin() + 2, -1); //将-1插入v[2]的位置
for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
cout << *it << " ";
}
return 0;
}
输出结果为
1 2 -1 3 4 5
还可以利用这个函数完成两个vector的拼接,即insert(v1.end(),v2.begin(),v2.end())
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> v, v1, v2;
for(int i = 1; i <= 3; i++) v.push_back(i);
for(int i = 11; i <= 13; i++) v1.push_back(i);
for(int i = 101; i <= 103; i++) v2.push_back(i);
v.insert(v.end(), v1.begin(), v1.end()); //输出1 2 3 11 12 13
v.insert(v.end(), v2.begin(), v2.end()); //输出1 2 3 11 12 13 101 102 103
return 0;
}
6.erase()
1.删除单个元素
erase(下标)即代表删除某个元素
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> v;
for(int i = 1; i <= 5; i++){
v.push_back(i); //将1、2、3、4、5 依次插入v的队尾
}
v.erase(v.begin() + 2); //删除3
for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
cout << *it << " ";
}
return 0;
}
2.删除一个区间的所有元素
erase(下标1,下标2)即代表删除[下标1,下标2)的所有元素,注意是左闭右开,所以
v[下标1]这个元素会被删除,v[下标2]这个元素不会删除
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> v;
for(int i = 1; i <= 5; i++){
v.push_back(i); //将1、2、3、4、5 依次插入v的队尾
}
v.erase(v.begin() + 1, v.begin() + 3); //删除2和3
for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
cout << *it << " ";
}
return 0;
}
输出接果
1 4 5
所以要想用erase实现删除所有元素正确写法是
v.erase(v.begin(),v.end())
其中v.end()表示的是尾元素的下一个地址