C++ vector
文章目录
前言
C++ 为使用者提供了标准模板库,里面封装了许多可以实现具体功能的容器,不需要费力去实现他们的细节而是直接调用函数来实现所需功能。其中对于数组中需要的功能进行封装后,诞生了 Vector。
Vector 虽然翻译为 向量 但是它是一个 长度可以根据需要而自动改变的数组,也就是动态数组。
一、vertor 定义
如果要使用 vector 需要引入头文件 ,并且声明命名空间 std
#include <vector>
using namespace std;
vector<typename> name; //相当于 一位数组 name[size] ,只不过长度可以根据需要进行变化。
//这里的 typename 可以是任何类型,也可以是 STL 容器
//typename 为常规类型
vector<int> Myint;
vector<double> Mydouble;
vector<node> Mynode; //node为结构体类型
//typename 为STL容器
vector<vector<int> > Myvector; //当typename 为STL容器时需注意:
// '>' 与 '>' 之间需要加空格,避免被编译器误认为位移操作 ">>"
二、vector常用函数
1.push_back():添加元素
时间复杂度为O(1)
代码如下(示例):
#include <iostream>
#include <vector>
using namespace std;
vector<int> Myint;
int main()
{
for(int i = 0; i <= 10; i ++)
{
Myint.push_back(i); //这就向 Mytypename 中添加了 11 个元素(0 - 10)。
}
for(int i = 0; i <= 10; i ++)
{
cout << Myint[i] << endl;
}
return 0;
}
输出结果:
2.size():获取元素个数
时间复杂度为O(1)
代码如下(示例):
#include <iostream>
#include <vector>
using namespace std;
vector<int> Myint;
int main()
{
for(int i = 0; i <= 10; i ++)
{
Myint.push_back(i); //这就向 Mytypename 中添加了 11 个元素(0 - 10)。
}
cout << Myint.size();
return 0;
}
输出结果:
3.pop_back():删除尾元素
时间复杂度为O(1)
代码如下(示例):
#include <iostream>
#include <vector>
using namespace std;
vector<int> Myint;
int main()
{
for(int i = 0; i <= 5; i ++)
{
Myint.push_back(i); //这就向 Mytypename 中添加了 6 个元素(0 - 5)。
}
cout << "添加完后元素个数为:"<< Myint.size() << endl;
for(int i = 0; i < 2; i ++)
{
Myint.pop_back();
cout << "删除后元素个数为:" << Myint.size() << endl;
for(int j = 0; j < Myint.size(); j ++ )
{
cout << Myint[j] << endl;
}
}
return 0;
}
输出结果:
4.clear():清空所有元素
时间复杂度为O(N),N为元素个数。
代码如下(示例):
#include <iostream>
#include <vector>
using namespace std;
vector<int> Myint;
int main()
{
for(int i = 0; i <= 10; i ++)
{
Myint.push_back(i); //这就向 Mytypename 中添加了 11 个元素(0 - 10)。
}
cout << "元素总数:" << Myint.size() << endl;
Myint.clear();
cout << "元素总数:" << Myint.size() << endl;
return 0;
}
输出结果:
5.insert():在任意迭代器处插入元素
时间复杂度为O(N)
什么是迭代器 : iterator
迭代器 iterator 可以理解成类似指针的东西。
vector迭代器定义
vector<typename>::iterator MyIterator;
// 这样定义后 就有一个 vector<typename>::iterator 类型的变量 Myiterator
// Myiterator就是迭代器, 我们可以用 *Myiterator 来访问 vector 里的元素
begin():取首地址
vector<int> Myint;
vector<int>::iterator MyIterator;
MyIterator = Myint.begin();
// 这样 MyIterator 就能访问到 Myint 的首元素地址
// *MyIterator 就能访问到 Myint 的首元素
insert() 插入实现
代码如下(示例):
#include <iostream>
#include <vector>
using namespace std;
vector<int> Myint;
int main()
{
for(int i = 0; i <= 5; i ++)
{
Myint.push_back(i); //这就向 Mytypename 中添加了 6 个元素(0 - 5)。
}
for(int i = 0; i < Myint.size(); i ++ )
{
cout << Myint[i];
}
cout << endl;
vector<int>::iterator a = Myint.begin();
Myint.insert(a , 9); // 首位插入 9
Myint.insert(a + 2, 8) // 第三位插入 8
for(int i = 0; i < Myint.size(); i ++ )
{
cout << Myint[i];
}
return 0;
}
输出结果:
6.erase():删除单个元素 或 删除区间元素(需要迭代器)
时间复杂度为O(N)
删除单个元素
代码如下(示例):
#include <iostream>
#include <vector>
using namespace std;
vector<int> Myint;
int main()
{
for(int i = 0; i <= 5; i ++)
{
Myint.push_back(i); //这就向 Mytypename 中添加了 6 个元素(0 - 5)。
}
for(int i = 0; i < Myint.size(); i ++) cout << Myint[i];
cout << endl;
vector<int>::iterator a = Myint.begin();
Myint.erase(a + 2); //删除第三位元素
for(int i = 0; i < Myint.size(); i ++)
{
cout << Myint[i] << endl;
}
return 0;
}
输出结果:
删除区间元素
代码如下(示例):
#include <iostream>
#include <vector>
using namespace std;
vector<int> Myint;
int main()
{
for(int i = 0; i <= 5; i ++)
{
Myint.push_back(i); //这就向 Mytypename 中添加了 6 个元素(0 - 5)。
}
for(int i = 0; i < Myint.size(); i ++) cout << Myint[i];
cout << endl;
vector<int>::iterator a = Myint.begin();
Myint.erase(a + 1, a + 3); //删除区间[2,3]的元素
for(int i = 0; i < Myint.size(); i ++)
{
cout << Myint[i] << endl;
}
return 0;
}
输出结果: