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 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 57 C++ vector容器的使用方法 -> 正文阅读

[C++知识库]57 C++ vector容器的使用方法

#include"vector_exercise.h"


// 打印方法1
void print_vector_01(vector<int>& arr)
{
	for (vector<int>::iterator i = arr.begin(); i != arr.end(); i++)
	{
		cout << *i << " ";
	}
	cout << endl;
}

// 打印方法2
void print_vector_02(vector<int>& arr)
{
	for (vector<int>::size_type i = 0; i != arr.size(); i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
}

void vector_construt()
{
	vector<int> arr_01;// 无参构造函数
	for (int i = 0; i < 10; i++)
	{
		arr_01.push_back(i); //往数组中插入数值
	}
	print_vector_01(arr_01); //打印方法1
	print_vector_02(arr_01); //打印方法2

	if (arr_01.empty())
	{
		cout << "arr_01 is empty!" << endl;
	}
	else
	{
		cout << "arr_01 is not empty!" << endl;
		cout << "arr_01的容量:" << arr_01.capacity() << endl;//13,该个数的空间vector会自动管理,一定会比size()返回的大
		cout << "arr_01的元素个数:" << arr_01.size() << endl;//10
	}

	// resize 重新指定大小,若指定的数值是更大,默认用0填充新位置
	arr_01.resize(15);
	print_vector_02(arr_01); //0 1 2 3 4 5 6 7 8 9 0 0 0 0 0
	// 可以利用重载版本替换默认填充,下面的意思是数值空间扩大到20,新填充的位置用10来填充
	arr_01.resize(20,10);
	print_vector_01(arr_01); //0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 10 10 10 10 10

	// resize 重新指定大小,若指定的数值比原有的空间小,超出部分的元素会被删除
	arr_01.resize(5);
	print_vector_01(arr_01);//0 1 2 3 4
}

void vevtor_push_pop()
{
	vector<int> arr;
	// 尾插
	arr.push_back(10);
	arr.push_back(20);
	arr.push_back(30);
	arr.push_back(40);
	arr.push_back(50);
	print_vector_02(arr); //10 20 30 40 50

	// 尾删
	arr.pop_back();
	print_vector_01(arr); //10 20 30 40

	// 插入
	arr.insert(arr.begin(), 100);
	print_vector_01(arr); // 100 10 20 30 40

	arr.insert(arr.begin(), 2, 1000);
	print_vector_01(arr); // 1000 1000 100 10 20 30 40

	// 删除
	arr.erase(arr.begin()); 
	print_vector_01(arr);// 1000 100 10 20 30 40

	// 清空
	//arr.erase(arr.begin(),arr.end());
	arr.clear();
	print_vector_02(arr);//

}

// 数据存取
void vector_access()
{
	vector<int> arr; // 创建数组

	// 添加元素到数组中
	for (int i = 0; i < 10; i++)
	{
		arr.push_back(i);
	}

	// 读取数组的方法
	// 方法1
	for (int i = 0; i < arr.size(); i++)
	{
		cout << arr[i] << ",";
	}
	cout << endl;

	// 方法2
	for (int i = 0; i < arr.size(); i++)
	{
		cout << arr.at(i) << ",";
	}
	cout << endl;

	cout << "arr的首元素:" << arr.front() << endl;
	cout << "arr的末元素:" << arr.back() << endl;


}


void vector_swap()
{

	// 原理
	vector<int> arr_01;
	vector<int> arr_02;

	for (int i = 0; i < 10; i++)
	{
		arr_01.push_back(i);
	}

	for (int i = 10; i > 0; i--)
	{
		arr_02.push_back(i);
	}
	cout << "交换前:" << endl;
	print_vector_01(arr_01);// 0 1 2 3 4 5 6 7 8 9
	print_vector_01(arr_02);// 10 9 8 7 6 5 4 3 2 1

	cout << "交换后:" << endl;
	arr_01.swap(arr_02);
	print_vector_01(arr_01);// 10 9 8 7 6 5 4 3 2 1
	print_vector_01(arr_02);// 0 1 2 3 4 5 6 7 8 9


	// 实际案例,收缩内存
	vector <int> arr_03;
	for (int i = 0; i < 10000; i++)
	{
		arr_03.push_back(i);
	}
	cout << "数组的容量:" << arr_03.capacity() << endl;//12138
	cout << "数组的元素总量:" << arr_03.size() << endl;//10000

	// 此时如果对数组进行收缩,会造成极大的资源浪费,元素只有3个,但容量有12138个
	arr_03.resize(3);
	cout << "数组的容量:" << arr_03.capacity() << endl;//12138
	cout << "数组的元素总量:" << arr_03.size() << endl;//3

	// 此时用匿名函数创建小空间来进行替换,来释放空间,匿名函数使用后,系统会自行释放;
	vector<int>(arr_03).swap(arr_03);
	cout << "数组的容量:" << arr_03.capacity() << endl;//3
	cout << "数组的元素总量:" << arr_03.size() << endl;//3

}

void vector_reserve()
{
	vector<int> arr;// 创建空数组

	// 预留空间
	arr.reserve(100000);// 启用该命令后开辟数组空间次数将大幅减少

	int count = 0;// 开辟数组空间的次数
	int* p = NULL;// 空指针
	for (int i = 0; i < 100000; i++)
	{
		arr.push_back(i);
		// 如果指针p指向的不是数组首元素地址,则需要重新指向一次,
		// 每重新指向一次,就代表系统重新开辟1次空间地址
		if (p != &arr[0])
		{
			p = &arr[0];
			count++;
		}
	}
	cout << "count: " << count << endl;

}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:16:03  更:2021-08-31 15:17:08 
 
开发: 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/23 17:14:45-

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