vector 的使用详解

目录

构造函数

析构函数

拷贝构造

赋值重载( operator = ( ) )

迭代器( begin( ) 和 end( ) )

范围 for

size ( ) 和 capacity ( )

reserve ( )

resize ( )

运算符重载 operator [ ] ( ) 与 at ( ) 

push_back ( )

pop_back ( )

insert ( )

erase ( )

swap ( )

clear ( )

front ( ) 和 back ( )

比较大小相关函数

完整代码


vector 是STL中的动态数组容器。可以存储任意类型的数据,包括内置类型和自定义。与 string 类不同,vector 要支持各种类型,所以 vector 要实现成模板,用于支持各种类型。

其使用的方式是:

vector<类型名>

构造函数

其支持带参构造,不带参构造,以及迭代器版本等。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);
}

析构函数

析构函数不需要我们显示调用,其会自动调用。

拷贝构造

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);
}

赋值重载( operator = ( ) )

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);

	// 赋值重载
	v4 = v2;
}

迭代器( begin( )end( ) )

begin() 返回开始位置的地址,end() 返回结束位置的下一个位置。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);

	// 赋值重载
	v4 = v2;

    // 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;
}

还有反向迭代器、const迭代器等,使用方法类似。

范围 for

范围 for 的底层为迭代器。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;
}

size ( ) 和 capacity ( )

取动态数组的长度和当前动态数组所开辟空间的大小。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	cout << v4.size() << ' ' << v4.capacity() << endl;
}

reserve ( )

用于预先开辟一块可以存储 n 个数据的空间。其会改变容量的大小。但如果 n 小于当前容量大小时,是否会缩容要看编译器的实现。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.reserve(66);
	cout << v4.size() << ' ' << v4.capacity() << endl;
}

resize ( )

用于调整数组的大小使其变为 n ,会改变数组的 size ,如果 n 大于当前数组长度,其会向后追加 n - size 个值为 val 的数,其默认为 0 ,如果 n 小于当前数组长度,其会将长度缩减为 n 。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.reserve(66);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//将长度调整为20,此时size = 10,所以追加 20-10 个值为 6 的数
	//未指定要追加的值,则默认为0
	v4.resize(20, 6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//要将长度调整为6
	v4.resize(6);
	cout << v4.size() << ' ' << v4.capacity() << endl;
}


运算符重载 operator [ ] ( ) 与 at ( ) 

直接使用下标访问某个位置的元素,不同的是如果访问下标不存在,operator [ ]会断言报错,而 at 会抛出异常。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.reserve(66);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//将长度调整为20,此时size = 10,所以追加 20-10 个值为 6 的数
	//未指定要追加的值,则默认为0
	v4.resize(20, 6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//要将长度调整为6
	v4.resize(6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v4[5] << endl;
	v4[5] = 5;
	cout << v4[5] << endl;
}

push_back ( )

向数组尾部插入一个值为 val 的元素,若空间不够其会自动扩容。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.reserve(66);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//将长度调整为20,此时size = 10,所以追加 20-10 个值为 6 的数
	//未指定要追加的值,则默认为0
	v4.resize(20, 6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//要将长度调整为6
	v4.resize(6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v4[5] << endl;
	v4[5] = 5;
	cout << v4[5] << endl;

	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	cout << v4.size() << ' ' << v4.capacity() << endl;
}

pop_back ( )

删除数组的最后一个元素。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.reserve(66);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//将长度调整为20,此时size = 10,所以追加 20-10 个值为 6 的数
	//未指定要追加的值,则默认为0
	v4.resize(20, 6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//要将长度调整为6
	v4.resize(6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v4[5] << endl;
	v4[5] = 5;
	cout << v4[5] << endl;

	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.pop_back();
	cout << v4.size() << ' ' << v4.capacity() << endl;
}

insert ( )

向数组指定位置之前插入元素。但不同的是其指定位置时,使用的是迭代器。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.reserve(66);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//将长度调整为20,此时size = 10,所以追加 20-10 个值为 6 的数
	//未指定要追加的值,则默认为0
	v4.resize(20, 6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//要将长度调整为6
	v4.resize(6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v4[5] << endl;
	v4[5] = 5;
	cout << v4[5] << endl;

	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.pop_back();
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//在第三个位置之前插入数据
	v4.insert(v4.begin() + 3, 7);
	cout << v4.size() << ' ' << v4.capacity() << endl;
}

erase ( )

用于删除指定数据,或指定的一段区间。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.reserve(66);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//将长度调整为20,此时size = 10,所以追加 20-10 个值为 6 的数
	//未指定要追加的值,则默认为0
	v4.resize(20, 6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//要将长度调整为6
	v4.resize(6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v4[5] << endl;
	v4[5] = 5;
	cout << v4[5] << endl;

	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.pop_back();
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//在第三个位置之前插入数据
	v4.insert(v4.begin() + 3, 7);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.erase(v4.begin() + 3);
	cout << v4.size() << ' ' << v4.capacity() << endl;
}

swap ( )

用于交换两个数组。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.reserve(66);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//将长度调整为20,此时size = 10,所以追加 20-10 个值为 6 的数
	//未指定要追加的值,则默认为0
	v4.resize(20, 6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//要将长度调整为6
	v4.resize(6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v4[5] << endl;
	v4[5] = 5;
	cout << v4[5] << endl;

	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.pop_back();
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//在第三个位置之前插入数据
	v4.insert(v4.begin() + 3, 7);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.erase(v4.begin() + 3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v3.size() << ' ' << v3.capacity() << endl;
	cout << v4.size() << ' ' << v4.capacity() << endl;
	v4.swap(v3);
	cout << v3.size() << ' ' << v3.capacity() << endl;
	cout << v4.size() << ' ' << v4.capacity() << endl;
}

clear ( )

清除所有数据,即 size 为 0 ,但容量不变。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.reserve(66);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//将长度调整为20,此时size = 10,所以追加 20-10 个值为 6 的数
	//未指定要追加的值,则默认为0
	v4.resize(20, 6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//要将长度调整为6
	v4.resize(6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v4[5] << endl;
	v4[5] = 5;
	cout << v4[5] << endl;

	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.pop_back();
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//在第三个位置之前插入数据
	v4.insert(v4.begin() + 3, 7);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.erase(v4.begin() + 3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v3.size() << ' ' << v3.capacity() << endl;
	cout << v4.size() << ' ' << v4.capacity() << endl;
	v4.swap(v3);
	cout << v3.size() << ' ' << v3.capacity() << endl;
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.clear();
	cout << v4.size() << ' ' << v4.capacity() << endl;
}

front ( )back ( )

用于获取第一个和最后一个元素。

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.reserve(66);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//将长度调整为20,此时size = 10,所以追加 20-10 个值为 6 的数
	//未指定要追加的值,则默认为0
	v4.resize(20, 6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//要将长度调整为6
	v4.resize(6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v4[5] << endl;
	v4[5] = 5;
	cout << v4[5] << endl;

	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.pop_back();
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//在第三个位置之前插入数据
	v4.insert(v4.begin() + 3, 7);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.erase(v4.begin() + 3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v3.size() << ' ' << v3.capacity() << endl;
	cout << v4.size() << ' ' << v4.capacity() << endl;
	v4.swap(v3);
	cout << v3.size() << ' ' << v3.capacity() << endl;
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.clear();
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v3.front() << ' ' << v3.back() << endl;
}

比较大小相关函数

vector 中提供了一系列比较大小

完整代码

#include<iostream>
#include<vector>
using namespace std;

void VectorTest()
{
	//无参构造,其默认初始化为0
	vector<int> v1;

	//带参构造,其用 n 个 val 值初始化
	vector<int> v2(10, 1);

	// 用迭代器进行构造
	vector<int> v3(v2.begin() + 1, v2.end() - 1);

	// 拷贝构造
	vector<int> v4(v3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	// 赋值重载
	v4 = v2;

	// 迭代器
	vector<int>::iterator it = v4.begin();
	while (it != v4.end())
	{
		cout << *it << ' ';
		it++;
	}
	cout << endl;

	// 范围for
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.reserve(66);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//将长度调整为20,此时size = 10,所以追加 20-10 个值为 6 的数
	//未指定要追加的值,则默认为0
	v4.resize(20, 6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//要将长度调整为6
	v4.resize(6);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v4[5] << endl;
	v4[5] = 5;
	cout << v4[5] << endl;

	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	v4.push_back(9);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.pop_back();
	cout << v4.size() << ' ' << v4.capacity() << endl;

	//在第三个位置之前插入数据
	v4.insert(v4.begin() + 3, 7);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.erase(v4.begin() + 3);
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v3.size() << ' ' << v3.capacity() << endl;
	cout << v4.size() << ' ' << v4.capacity() << endl;
	v4.swap(v3);
	cout << v3.size() << ' ' << v3.capacity() << endl;
	cout << v4.size() << ' ' << v4.capacity() << endl;

	v4.clear();
	cout << v4.size() << ' ' << v4.capacity() << endl;

	cout << v3.front() << ' ' << v3.back() << endl;
}

int main()
{
	VectorTest();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值