栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

STL vector(向量)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STL vector(向量)

目录

向量(vector)

构造函数

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

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

vector嵌套vector(二维向量)


向量(vector)

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

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

构造函数
#include 
#include 
#include 

using namespace std;

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

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

	//声明一个double类型向量,初始化大小为11,值为11.11(就是11个11.11)
	vector 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 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 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 
#include 

using namespace std;

int main()
{
	vector 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 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::iterator it = v_int.begin(); it != v_int.end(); ++it)
	{
		cout << *it << " ";	//1223334444
	}
	cout << endl;

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

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

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

	return 0;
}

大小,容量,判空,迭代器,交换两个容器,对容器进行排序
vector v;
v.size();            //元素个数
v.max_size();        //所能存储最大元素个数
v.resize();          //改变元素个数

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

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

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

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

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

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

vector嵌套vector(二维向量)
#include 
#include 

using namespace std;

int main()
{
	//vector(3,1) 这个是匿名对象 
	//整体相当于int[2][3] 全部初始化为1
	vector> v(2, vector(3, 1));	
	
	//遍历 
	//auto it = v.begin();
	vector>::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 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> v; 这样使用
	//然后在声明一个vector插入数据,然后将这个插入到二维上
	//遍历的时候拿到一个迭代器取值,中括号下标就可以了
	//这东西本质上其实还是指针嘛

	return 0;
}

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

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

#include 
#include 

using namespace std;

int main()
{
	//vector(3,1) 这个是匿名对象 
	//整体相当于int[2][3] 全部初始化为1
	vector> v(2, vector(3, 1));	
	
	//遍历 
	//auto it = v.begin();
	vector>::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 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> v; 这样使用
	//然后在声明一个vector插入数据,然后将这个插入到二维上
	//遍历的时候拿到一个迭代器取值,中括号下标就可以了
	//这东西本质上其实还是指针嘛

	return 0;
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284219.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号