文章目录
前言
vector是什么、push_back、迭代器、构建string类型的数组、vector的构造初始化、sort算法排序、reserve函数、头删、头插、删除(所有)某个数字、vector的扩容等的介绍
一、vector是什么?
vector是一个可以更改大小的数组模板。可以使用不同的类型,构建不同类型的数组。
二、push_back、迭代器使用
#include<iostream>
#include <vector>
using namespace std;
void Test_vector1()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
cout << v.size() << endl;
cout << v.capacity() << endl;
for (size_t i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl;
std::vector<int>::iterator it = v.begin();
while (it != v.end())
{
cout << *it << " ";
++it;
}
cout << endl;
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
}
int main()
{
Test_vector1();
return 0;
}
二、构建string类型的数组
void Test_vector2()
{
vector<string> str;
string s("hello world ");
str.push_back(s);
str.push_back(string("hello csdn "));
str.push_back("张三");
for (auto ch : str)
{
cout << ch << " ";
}
cout << endl;
}
四、vector的构造初始化、sort算法排序
default (1) explicit vector (const allocator_type& alloc = allocator_type());
fill (2) explicit vector (size_type n, const value_type& val = value_type(),
const allocator_type& alloc = allocator_type());
range (3) template <class InputIterator>
vector (InputIterator first, InputIterator last,
const allocator_type& alloc = allocator_type());
copy (4) vector (const vector& x);
- value_type()就是模板T,(元素的类型)
void Test_vector3()
{
// n 个 value_type初始化
vector<int> v1(10, 1);
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
vector<string> v2(10, "###");
for (auto e : v2)
{
cout << e << " ";
}
cout << endl;
// 自己类型的迭代器初始化
vector<int> v3(v1.begin(), v1.end());
for (auto e : v3)
{
cout << e << " ";
}
cout << endl;
vector<string> v4(v2.begin(), v2.end());
for (auto e : v4)
{
cout << e << " ";
}
cout << endl;
string s("hello world");
vector<char> v5(s.begin(), s.end());
for (auto e : v5)
{
cout << e << " ";
}
cout << endl;
int a[] = { 16,28,37,65,98,200,35 };
vector<int> v6(a, a + sizeof(a) / sizeof(a[0]));
for (auto e : v6)
{
cout << e << " ";
}
cout << endl;
// sort算法排序
// sort算法默认是升序
// less
sort(v6.begin(), v6.end());
for (auto e : v6)
{
cout << e << " ";
}
cout << endl;
// 降序
// greater
//greater<int> gt;
//sort(v6.begin(), v6.end(), gt);
sort(v6.begin(), v6.end(), greater<int>());
for (auto e : v6)
{
cout << e << " ";
}
cout << endl;
string sstr("lays and gentlmen");
sort(sstr.begin(), sstr.end());
for (auto e : sstr)
{
cout << e << " ";
}
cout << endl;
}
五、reserve函数
- 一段经典的错误代码
reserve(10)开辟了10个空间,但是size的值并没有变化。
【】的运算符重载函数,首先就需要assert断言pos位置必须小于size,size为0,所以此处断言报错。 - 正确的做法是使用resize函数
void Test_vector4()
{
vector<int> v1;
// 开辟10个空间
/*v1.reserve(10);
for (size_t i = 0; i < 10; i++)
{
v1[i] = i;
}
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;*/
v1.resize(10);
for (size_t i = 0; i < v1.size(); i++)
{
v1[i] = i;
}
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
}
-如果必须用reserve,则可以使用push_back插入数据,如下:
vector<int> v2;
v2.reserve(10);
for (size_t i = 0; i < 10; i++)
{
v2.push_back(i);
}
for (auto e : v2)
{
cout << e << " ";
}
cout << endl;
六、头删、头插、删除(所有)某个数字(find先找到找这个数字)
void Test_vector5()
{
int array[] = { 16,23,38,0,25,4,66,97,73,52,68,49,31 };
vector<int> v1(array, array + sizeof(array) / sizeof(array[0]));
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
// 头删
v1.erase(v1.begin());
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
// 头插
v1.insert(v1.begin(), 100);
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
// 删除第3个数据
v1.erase(v1.begin() + 2);
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
cout << "---------------------------" << endl;
int a[] = { 15,6,3,18,5,6,20,60, 5, 6, 5 };
vector<int> v2(a, a + sizeof(a) / sizeof(a[0]));
for (auto e : v2)
{
cout << e << " ";
}
cout << endl;
// 删除5, 先通过find找到5
//vector<int>::iterator pos = find(v2.begin(), v2.end(), 5);
auto pos = find(v2.begin(), v2.end(), 5);
if (pos != v2.end())
{
v2.erase(pos);
}
for (auto e : v2)
{
cout << e << " ";
}
cout << endl;
// 删除所有的5
//vector<int>::iterator pos = find(v2.begin(), v2.end(), 5);
auto pos1 = find(v2.begin(), v2.end(), 5);
while (pos1 != v2.end())
{
v2.erase(pos1);
pos1 = find(v2.begin(), v2.end(), 5);
}
for (auto e : v2)
{
cout << e << " ";
}
cout << endl;
}
七、vector的扩容
windows环境下
void Test_vector6()
{
vector<int> v;
size_t sz = v.capacity();
cout << "vector<int>的扩容:" << endl;
for (size_t i = 0; i < 100; i++)
{
v.push_back(i);
if (sz != v.capacity())
{
sz = v.capacity();
cout << "扩容: " << sz << endl;
}
}
}
总结
vector是什么、push_back、迭代器、构建string类型的数组、vector的构造初始化、sort算法排序、reserve函数、头删、头插、删除(所有)某个数字、vector的扩容等的介绍