IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> STL vector(向量) -> 正文阅读

[系统运维]STL vector(向量)

目录

向量(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;
}

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-02 15:13:35  更:2021-10-02 15:14:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:04:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码