目录
前言
前面我们介绍了string的模拟实现,本期我们将对vector的使用以及模拟实现进行介绍,vector作为我们接触的第一个标准模板库中的容器有着它独特的特点,通过vector的模拟实现,我们将更加直观地体会到C++的封装特性。
vector的介绍
1.vector是表示可变大小的数组序列容器,就像数组一样,vector也采用连续存储空间来存储元素
2.vector使用动态分配数组来存储它的元素,它会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间大
3.vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于不在开头和末尾插入和删除的操作,效率更低
vector的使用
打开vector的文档介绍我们看到,vector主要可以实现增删查改,迭代器、构造、析构、拷贝构造等功能,与string类似,但又有所区别,下面我们将列举几段代码,来学习vector的使用。
using namespace std;
void Test_vector1()
{
vector<int> v1;
vector<int> v2(4, 100); //创建一个v2并将其四个空间初始化为100
vector<int> v3(v2.begin(), v2.end()); //将v3按照v2的起始位置初始化到最后
vector<int> v4(v3); //拷贝构造v4
}
void Test_vector2()
{
//创建一个名为v1的vector模板,参数类型是int
vector<int> v1;
//尾插1 2 3 4
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
//通过迭代器遍历
vector<int>::iterator it1 = v1.begin();
while (it1 != v1.end())
{
cout << *it1 << " ";
it1++;
}
cout << endl;
//size()获取数据个数
for (size_t i = 0; i < v1.size(); i++)
{
cout << v1[i] << " ";
}
cout << endl;
v1.push_back(5);
//获取容量大小(vs是1.5倍扩容,linux是2倍扩容)
cout << v1.capacity() << endl;
}
void Test_vector3()
{
vector<int> v;
for (int i = 1; i < 10; i++)
{
v.push_back(i);
}
for (size_t i = 0; i < v.size(); i++)
{
cout << ' ' << v[i];
}
cout << endl;
v.resize(5); //设置v的size为5
v.resize(8, 100); //设置v的size为8,并将这八个位置初始化为100
v.resize(12); //设置v的size为12
cout << "v contains:";
for (size_t i = 0; i < v.size(); i++)
{
cout << ' ' << v[i];
}
cout << '\n';
}
void Test_vector4