STL中的vector类似于c语言中的支持动态增长的数组,我们现在先不讨论底层原理,下次文章再讨论vector的底层实现。
在vector中需要定义动态数组中的类型,拿整型int来举例,创建一个整型vector数组
#include<vector>
#include<iostream>
int main()
{
vector<int> v;
}
我们可以分成多个测试函数,分别测试不同的接口,写一个test_vector1用于测试,构造函数,拷贝构造,赋值运算符,
void test_vector1()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
v1.push_back(6);
vector<int> v2(v1);
for (size_t i = 0; i < v2.size(); i++)
{
cout << v2[i] << " ";
}
cout << endl;
vector<int> v3;
v3 = v1;
for (size_t i = 0; i < v3.size(); i++)
{
cout << v3[i] << " ";
}
}
然后在主函数中测试
int main()
{
test_vector1();
test_vector2();
test_vector3();
test_vector4();
test_vector5();
return 0;
}
其中test_vector2(),用于测试数组中的写权限
void test_vector2()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
for (auto ch : v)
{
ch++;
cout << ch << " ";
}
cout << endl;
}
test_vector3()用于测试迭代方式
void print_vector(const vector<int>& vt)
{
vector<int>::const_reverse_iterator vb = vt.rbegin();//这里是逆置const迭代器
while (vb != vt.rend())
{
cout << *vb << " ";
vb++;
}
cout << endl;
}
void test_vector3()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
vector<int>::reverse_iterator rit = v.rbegin();//对应的变量要对应相对应的迭代器
while (rit != v.rend())
{
(*rit)++;
cout << *rit << endl;
rit++;
}
print_vector(v);
for (size_t i = 0; i < v3.size(); i++)
{
cout << v3[i] << " ";
}
vector<int>::iterator it = v1.begin();
while (it != v1.end())
{
cout << *it << " ";
it++;
}
cout << endl;
for (auto ch : v1)//范围for 底层实际上就是运用迭代器的原理
{
cout << ch << " ";
}
cout << endl;
}
test_vector4(),用于insert和erase vector中没有头插头删,因为效率太低了
void test_vector4()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
v1.insert(v1.begin(), 0);
for (auto ch : v1)
{
cout << ch << " ";
}
cout << endl;
v1.erase(v1.begin());
for (auto ch : v1)
{
cout << ch << " ";
}
}
test_vector5()用于使用算法find和sort(底层实现是快排),用于删除想要删除的元素
#include<algorithm>
void test_vector5()
{
vector<int> v;
v.push_back(7);
v.push_back(4);
v.push_back(5);
v.push_back(2);
v.push_back(92);
v.push_back(41);
v.push_back(20);
//我要删除5
for (auto ch : v)
{
cout << ch << " ";
}
cout << endl;
vector<int>::iterator pos = find(v.begin(), v.end(),20);
if (pos != v.end())
{
v.erase(pos);
}
for (auto ch : v)
{
cout << ch << " ";
}
cout << endl;
sort(v.begin(), v.end());//默认升序
for (auto ch : v)
{
cout << ch << " ";
}
cout << endl;
}