STL vector(向量)

本文详细介绍了C++ STL中的vector,包括其作为动态顺序容器的特点,快速索引和尾部操作的优势。内容涵盖构造函数、插入删除元素、查询容器状态、交换操作以及如何使用vector创建二维向量。通过实例展示了vector的高效性和灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

向量(vector)

构造函数

修改函数(插入,删除,修改元素个数,清空)

大小,容量,判空,迭代器,交换两个容器,对容器进行排序

vector嵌套vector(二维向量)


向量(vector)

一个动态容的顺序容器,连续的存储地址,可以通过[]来直接访问任意元素.

相比list和deque,可以更快的索引,可以在尾部快速的删除和插入

构造函数

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
	//声明一个int类型向量
	vector<int> v_int;	
	//声明一个int类型向量,并用另一个对齐初始化(拷贝构造)
	vector<int> v_int2(v_int);	
	cout << v_int.size() << endl;	//0 vector中元素数量大小

	//声明一个double类型向量,初始化大小为11,不是值
	vector<double> v_double(11);	
	cout << v_double.size() << endl;	//11

	//声明一个double类型向量,初始化大小为11,值为11.11(就是11个11.11)
	vector<double> v_double2(11, 11.11);	
	//遍历
	for (int i = 0; i < v_double2.size(); ++i)
	{
		cout << v_double2[i] << " ";	//11个11.11
	}
	cout << endl;

	//声明一个double类型向量,初始化为3个11.11
	vector<double> v_double3(v_double2.begin(), v_double2.begin() + 2);	
	for (int i = 0; i < v_double3.size(); ++i)
	{
		cout << v_double3[i] << " ";	//2个11.11
	}
	cout << endl;

	//当然了用数组初始化也可以
	int arr[] = { 1,2,3,4,5 };
	vector<int> v_int3(arr, arr + 5);
	for (int i = 0; i < v_int3.size(); ++i)
	{
		cout << v_int3[i] << " ";	//1 2 3 4 5 
	}
	cout << endl;

	return 0;
}

修改函数(插入,删除,修改元素个数,清空)

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector<int> v_int;

	//在开始迭代器处插入1
	v_int.insert(v_int.begin(), 1);

	//在开始迭代器下一位置插入2个2
	v_int.insert(v_int.begin() + 1, 2, 2);

	int arr[] = { 3,3,3 };
	vector<int> v_int2(arr, arr + 3);
	//在迭代器向后移动三次位置插入3个3(其实就是在vector第三个位置后插入)
	//迭代器的区间都是左闭右开
	v_int.insert(v_int.begin() + 3, v_int2.begin(), v_int2.end());

	//尾部插入
	v_int.push_back(4);
	v_int.push_back(4);
	v_int.push_back(4);
	v_int.push_back(4);

	//迭代器遍历
	for (vector<int>::iterator it = v_int.begin(); it != v_int.end(); ++it)
	{
		cout << *it << " ";	//1223334444
	}
	cout << endl;

	//改变元素个数
	v_int.resize(6);
	for (vector<int>::iterator it = v_int.begin(); it != v_int.end(); ++it)
	{
		cout << *it << " ";	//122333
	}
	cout << endl;

	//改变元素个数,增加的新元素初始化为4
	v_int.resize(10, 4);
	for (vector<int>::iterator it = v_int.begin(); it != v_int.end(); ++it)
	{
		cout << *it << " ";	//1223334444
	}
	cout << endl;

	//尾删 删除4个4
	v_int.pop_back();
	v_int.pop_back();
	v_int.pop_back();
	v_int.pop_back();
	for (vector<int>::iterator it = v_int.begin(); it != v_int.end(); ++it)
	{
		cout << *it << " ";	//122333
	}
	cout << endl;

	//指定迭代器删除
	v_int.erase(v_int.begin() + 5);	//删除的是最后一个3
	for (vector<int>::iterator it = v_int.begin(); it != v_int.end(); ++it)
	{
		cout << *it << " ";	//12233
	}
	cout << endl;

	//指定迭代器区间删除
	v_int.erase(v_int.begin() + 1, v_int.end());
	for (vector<int>::iterator it = v_int.begin(); it != v_int.end(); ++it)
	{
		cout << *it << " ";	//1
	}
	cout << endl;

	//删除所有元素
	v_int.clear();
	for (vector<int>::iterator it = v_int.begin(); it != v_int.end(); ++it)
	{
		cout << *it << " ";	//1
	}
	cout << endl;

	return 0;
}

大小,容量,判空,迭代器,交换两个容器,对容器进行排序

vector<int> v;
v.size();            //元素个数
v.max_size();        //所能存储最大元素个数
v.resize();          //改变元素个数

v.capacity();        //能容纳元素的数量
v.reserve();         //改变容纳元素的数量

v.empty();           //判断容器是否为空

//定义一个int类型的vector迭代器指向容器v开始位置
vector<int>::iterator it = v.begin();

vector<int> v2;
v.swap(v2);           //交换两个元素

//对vector进行排序,需要加入头文件algorithm
sort(v.begin(),v.end());

直接写代码要是都输出结果太乱了,我自己看的都头疼.然后就这样把常用的一些列举一下吧.

vector嵌套vector(二维向量)

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	//vector<int>(3,1) 这个是匿名对象 
	//整体相当于int[2][3] 全部初始化为1
	vector<vector<int>> v(2, vector<int>(3, 1));	
	
	//遍历 
	//auto it = v.begin();
	vector<vector<int>>::iterator it = v.begin();
	//*it 就是最里层<>里的东西

	cout << v.size() << endl;	//2
	cout << it->size() << endl;	//3

	for (int i = 0; i < v.size(); ++i)
	{
		for (int j = 0; j < it->size(); ++j)
		{
			cout << v[i][j] << " " ;
		}
		cout << endl;
	}

	vector<int> v2;
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);

	v.push_back(v2);

	it = v.begin();

	cout << v.size() << endl;	//3
	cout << it->size() << endl;	//3

	for (int i = 0; i < v.size(); ++i)
	{
		for (int j = 0; j < it->size(); ++j)
		{
			cout << v[i][j] << " ";
		}
		cout << endl;
	}

	//但是这是逻辑结构,很容易把自己玩懵,例如上面我在v2中插了好多数据但是显示的只有三个(因为我上面限定了三个)
	//要修改可以使用resize
	//一般真要用的时候也都是直接vector<vector<int>> v; 这样使用
	//然后在声明一个vector插入数据,然后将这个插入到二维上
	//遍历的时候拿到一个迭代器取值,中括号下标就可以了
	//这东西本质上其实还是指针嘛

	return 0;
}

 不知道有没有小伙伴学过Java,Java中的数组是不是感觉好牛,那么看好了.找找我改了哪里吧.

我只是为了说明迭代器,完全如Java那样写也是完全ok的!

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	//vector<int>(3,1) 这个是匿名对象 
	//整体相当于int[2][3] 全部初始化为1
	vector<vector<int>> v(2, vector<int>(3, 1));	
	
	//遍历 
	//auto it = v.begin();
	vector<vector<int>>::iterator it = v.begin();
	//*it 就是最里层<>里的东西

	cout << v.size() << endl;	//2
	cout << it->size() << endl;	//3

	for (int i = 0; i < v.size(); ++i)
	{
		for (int j = 0; j < it->size(); ++j)
		{
			cout << v[i][j] << " " ;
		}
		cout << endl;
	}

	vector<int> v2;
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);
	v2.push_back(2);

	v.push_back(v2);

	it = v.begin();

	cout << v.size() << endl;	//3
	cout << it->size() << endl;	//3

	for (int i = 0; i < v.size(); ++i)
	{
		for (int j = 0; j < it[i].size(); ++j)
		{
			cout << v[i][j] << " ";
		}
		cout << endl;
	}

	//但是这是逻辑结构,很容易把自己玩懵,例如上面我在v2中插了好多数据但是显示的只有三个(因为我上面限定了三个)
	//要修改可以使用resize
	//一般真要用的时候也都是直接vector<vector<int>> v; 这样使用
	//然后在声明一个vector插入数据,然后将这个插入到二维上
	//遍历的时候拿到一个迭代器取值,中括号下标就可以了
	//这东西本质上其实还是指针嘛

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值