C++之STL -- vector
(1)vector是将元素置于一个动态数组中加以管理的容器
(2)vector可以随机存取元素(支持索引直接存取,用[]操作或者at()方法)
特点:vector在尾部添加或者移动元素非常快,但是在头部或中间插入元素或移除元素比较费时。
1.vector的初始化
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(3);
v1.push_back(5);
v1.push_back(7);
vector<int> v2 = v1; //对象初始化
vector<int> v3(v1.begin(),v1.begin()+2);
return 0;
}
2.数组元素的弹出,添加和删除。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1;
cout << "v1.size() = " << v1.size() << endl;
v1.push_back(1);
v1.push_back(3);
v1.push_back(5);
cout << "v1.size() = " << v1.size() << endl;
cout <<"头部元素为:" << v1.front() << endl; //获取头部元素
v1.front() = 10; //修改头部元素
cout << "弹出元素:" << endl;
while (!v1.empty())
{
cout << v1.back() << " "; //获取尾部元素
v1.pop_back(); //删除尾部元素
}
cout << endl;
return 0;
}
3.vector的遍历
#include <iostream>
#include <vector>
using namespace std;
void printV(vector<int> &v)
{
for(int i=0;i<v.size();i++)
{
cout << v[i] << " ";
}
cout << endl;
}
int main()
{
vector<int> v1(5); //提前准备好内存
for(int i=0;i<5;i++)
{
v1[i] = i+1;
}
printV(v1);
return 0;
}
4.vector迭代器
注:v1.end()的位置是最后一个元素的后面。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1(10);
for(int i=0;i<10;i++)
{
v1[i] = i+1;
}
for(vector<int>::iterator it = v1.begin();it!=v1.end();it++)
{
cout << *it << " ";
}
cout << endl;
return 0;
}
5.迭代器种类
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1(10);
for(int i=0;i<10;i++)
{
v1[i] = i+1;
}
//正向遍历
for(vector<int>::iterator it = v1.begin();it!=v1.end();it++)
{
cout << *it << " ";
}
cout << endl;
//逆向遍历
for(vector<int>::reverse_iterator rit = v1.rbegin();rit!=v1.rend();rit++)
{
cout << *rit << " ";
}
cout << endl;
return 0;
}
6.vector的基本操作
(1)区间删除
(2)指定位置删除
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1(10);
for(int i=0;i<10;i++)
{
v1[i] = i+1;
}
//区间删除
v1.erase(v1.begin(),v1.begin()+3); //前三个元素被删除
//指定位置删除
v1.erase(v1.begin()); //在头部删除一个元素
for(vector<int>::iterator it = v1.begin();it!=v1.end();it++)
{
cout << *it << " ";
}
cout << endl;
return 0;
}
(3)根据元素的值删除
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1(10);
for(int i=0;i<10;i++)
{
v1[i] = i+1;
}
for(vector<int>::iterator it = v1.begin();it!=v1.end();it++)
{
if (*it == 2)
{//返回迭代器对象
it = erase(it); //当删除迭代器所指向的元素的时候,erase删除函数会让it自动下移
}
else
{
it++;
}
}
cout << endl;
return 0;
}
(4)插入:insert
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1(10);
for(int i=0;i<10;i++)
{
v1[i] = i+1;
}
v1.insert(v1.begin(),100); //头部插入
v1.insert(v1.end(),200); //尾部插入
for(vector<int>::iterator it = v1.begin();it!=v1.end();it++)
{
cout << *it << " ";
}
cout << endl;
return 0;
}