vector容器会了吗?一文搞定它

news2024/11/24 20:00:55

这里写目录标题

  • 赋值操作
  • 容量和大小
  • 插入和删除操作
  • 数据存取
  • 互换容器
  • vector预留空间

赋值操作

#include<iostream>
#include <vector>
using namespace std;
void print(vector<int>& v)
{
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	 }
	cout << endl;
}

它是动态扩展,找一块新的更大的空间,把原来的数据拷贝到这,释放原来的空间

//1.赋值操作
/*

  • 函数模型:
  • vector& operator=(const vector& dep)
  • 重载=运算符
  • assign(beg,end);
  • 将beg,end之间的数据拷贝给自身
  • assign(n,elem);
  • 将n个elem拷贝赋值给本身
    /
    /
void test01()
{
	vector<int>v;
	vector<int>v1;
	vector<int>v2;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	print(v);
	v1 = v;
	//直接赋值法
	print(v1);

	v2.assign(v.begin(), v.end());
	//assign 赋值
	print(v2);

	//n个元素方式赋值
	vector<int>v3;
	v3.assign(10, 100);//打印10个100
		print(v3);
}

容量和大小

//2.容量和大小

/*

  • 函数原型:
    empty()
    判断容器是否为空
    capacity()
    容器的容量
    size()
    返回容器中元素的个数
    resize(int num)
    重新指定容器的长度为num,
    如果容器变长则以默认值填充新位置
    如果容器变短,则末尾超过容器长度的元素删除
    resize(int num,elem)
    重新指定容器的长度为num,
    如果容器变长则以elem值填充新位置
    如果容器变短,则末尾超过容器长度的元素删除
    /
    /
void test02()
{
	vector<int>v1;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}
	print(v1);
	if (!v1.empty() )
		cout << "buweikong" << endl;
	cout << "v1的容量大小:" << v1.capacity() << endl;
	cout << "v1的大小:" << v1.size() << endl;
	
	v1.resize(12,20);
	print(v1);
}

插入和删除操作

//3.插入和删除操作
/*

  • 函数原型
    push_back(elem);
    尾部插入元素elem
    pop_back();
    删除最后一个元素
    insert(const_iterator pos,elem);
    迭代器指向位置pos插入元素elem
    insert(const_iterator pos,int cout,elem);
    迭代器指向位置pos插入cout个元素elem
    erase(const_iterator pos);删除迭代器指向的元素
    erase(const_iterator start,const_iterator end);
    删除迭代器从start到end之间的元素
    clear();
    删除容器中所有元素
    */

数据存取

//4.数据存取
/*
函数原型:
at(int idx);
返回索引idx所指的数据
operator[]
返回索引idx所指的数据
front();
返回容器中第一个数据元素
back();
返回容器中最后一个数据元素
/
/

void test04()
{
	vector<int>v4;
	for (int i = 0; i < 1000; i++)
	{
		v4.push_back(i);
		//利用at访问元素	
		//cout << v4.at(i) << endl;
		//cout << v4[i] << endl;
	}
	int n=v4.back();
	//print(v4);
	cout <<"最后一个元素:" << n << endl;
	n = v4.front();
	cout <<"第一个元素:" << n << endl;

互换容器

//函数模型:swap(vex)
vector<int>v5;
	v5.swap(v4);
	

	//print(v5);
	//print(v4);//因为v5是空,所以交换之后不进入for循环,打印一个换行
	//巧用swap()可以收缩内存空间
	cout << "v4的容量是:" << v4.capacity() << endl;
	cout << "v5的容量是:" << v5.capacity() << endl;
	cout << "v5的大小是:" << v5.size() << endl;
	v5.resize(3);//改变了大小,但是容量没有改变,所以浪费了
	cout << "v5的容量是:" << v5.capacity() << endl;
	cout << "v5的大小是:" << v5.size() << endl;

	//巧用swap收缩
	vector<int>(v5).swap(v5);
	cout << "v5的容量是:" << v5.capacity() << endl;
	cout << "v5的大小是:" << v5.size() << endl;
	//vector<int>(v5)匿名对象 利用拷贝函数构造新的对象
	//swap(v5);      容器的交换,相当于指针进行交换,交换完之后,匿名对象会自动销毁(销毁原来的1000)

}

vector预留空间

void test06()
{
	vector<int>v;
	//预留空间
	v.reserve(100000);
	int num = 0;
	int* p = NULL;
	for (int i = 0; i < 100000; i++)
	{
		v.push_back(i); 
		if (p != &v[0])
		{
			p = &v[0];
			num++;
		}
}
	cout << "重新开辟次数:" << num << endl;
}


int main()
{
	//test01();
	//test02();
	//test04();
	test06();
	system("pause");
	return 0;
}

此外如果大家有购书需求,欢迎大家考虑一下清华社,直接以最低的价格买到最好的书!

详情链接添加链接描述

在这里插入图片描述

618,清华社 IT BOOK 多得图书活动开始啦!活动时间为 2023 年 6 月 7 日至 6 月 18 日,
清华社为您精选多款高分好书,涵盖了 C++、Java、Python、前端、后端、数据库、算法与机器学习等多个 IT 开发领域,适合不同层次的读者。全场 5 折,扫码领券更有优惠哦!
快来京东点击链接 IT BOOK 多得(或扫描京东二维码)查看详情吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/628060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ROS2】使用摄像头功能包 usb_cam

1、准备工作 因为本人使用VirtualBox虚拟机运行的ROS2&#xff0c;所以首先要让摄像头可以在虚拟机中运行 1.1 安装VirtualBox扩展包 1&#xff09;下载地址&#xff1a;https://www.virtualbox.org/wiki/Downloads&#xff0c;注意扩展包的版本要和虚拟机的版本匹配 2&…

《C++高级编程》读书笔记(七:内存管理)

1、参考引用 C高级编程&#xff08;第4版&#xff0c;C17标准&#xff09;马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门&#xff0c;笔记链接如下 21天学通C读书笔记&#xff08;文章链接汇总&#xff09; 1. 使用动态内存 1.1 如何描绘内存 在本书中&#xff0c;内存单…

Tik Tok的海外娱乐公会(中亚、巴西、美国、台湾)怎么申请?

TIKTOK 公会海外市场潜力巨大 自 2016 年始&#xff0c;多家直播平台陆续拓展至东南亚、中东、俄罗斯、日韩、 欧美、拉美等地区 海外市场作为直播发展新蓝海&#xff0c;2021 年直播行业整体规模达百亿美元&#xff0c; 并维持高速增长 TikTok 直播市场空间 TikTok 已经成…

Python3+Selenium2完整的自动化测试实现之旅(七):完整的轻量级自动化框架实现

一、前言 前面系列Python3Selenium2自动化系列博文&#xff0c;陆陆续续总结了自动化环境最基础环境的搭建、IE和Chrome浏览器驱动配置、selenium下的webdriver模块提供的元素定位和操作鼠标、键盘、警示框、浏览器cookie、多窗口切换等场景的方法、web自动化测试框架、python面…

如何系统的学习robo-gym

提醒&#xff1a;以下内容仅做参考&#xff0c;可自行发散。在发布作品前&#xff0c;请把不需要的内容删掉。无论是初学者还是有经验的专业人士&#xff0c;在学习一门新的IT技术时&#xff0c;都需要采取一种系统性的学习方法。那么作为一名技术er&#xff0c;你是如何系统的…

OpenPCDet安装、使用方式及自定义数据集训练

OpenPCDet安装、使用方式及自定义数据集训练 个人博客 OpenPCDet安装 # 先根据自己的cuda版本&#xff0c;安装对应的spconv pip install spconv-cu113# 下载OpenPCDet并安装 git clone https://github.com/open-mmlab/OpenPCDet.git cd OpenPCDet pip install -r requireme…

Jetpack Compose 中安全地消耗Flow

Jetpack Compose 中安全地消耗Flow 以 Lifecycle 为周期的方式收集流是在 Android 上收集流的推荐方式。如果您正在使用 Jetpack Compose 构建 Android 应用程序&#xff0c;则使用 collectAsStateWithLifecycle API 可以在 Lifecycle 为周期的方式下从您的 UI 中收集流。 co…

利用Jmeter做接口测试(功能测试)全流程分析

利用Jmeter做接口测试怎么做呢&#xff1f;过程真的是超级简单。 明白了原理以后&#xff0c;把零碎的知识点填充进去就可以了。所以在学习的过程中&#xff0c;不管学什么&#xff0c;我一直都强调的是要循序渐进&#xff0c;和明白原理和逻辑。这篇文章就来介绍一下如何利用…

CP2102 USB转UART国产桥接芯片 DPU02

芯片概述: DPU02是一个高度集成的USB转UART的桥接控制器&#xff0c;该产品提供了一个简单的解决方案&#xff0c;可将RS-232设计更新为USB设计&#xff0c;并简化PCB组件空间。该DPU02包括了一个USB2.0全速功能控制器、USB收发器、振荡器、EEPROM和带有完整调制解调控制信号的…

通过宝塔辅助部署本地Python爬虫项目到阿里云轻量服务器

文章目录 一、 上传项目文件二、准备项目环境2.1、安装 requirements.txt 依赖2.2、安装 node.js 环境2.3、阿里云服务器MySQL 8.0开启远程连接2.4、本地远程连接MySQL测试2.4.1、navicat 远程连接测试2.4.2、python 代码连接测试 笔记&#xff1a;最近想把本地的一套爬虫项目给…

SpringBoot——启动源码(一)

SpringBootApplication注解 前言SpringBootApplicationSpringBootConfigurationEnableAutoConfigurationimport注解 ComponentScan 总结 前言 Springboot作为Spring的脚手架&#xff0c;其本质核心并不提供Spring核心功能&#xff0c;作用就是开发者快速构建&#xff0c;预置三…

怎么转换英文音频成文字?英文音频转文字app分享

两位朋友正在讨论如何将一段英文讲座的音频转换成文字&#xff0c;以便于学习和理解。 Sophia&#xff1a;嗨&#xff0c;我最近听了一段非常精彩的英文讲座&#xff0c;但是对于我来说&#xff0c;理解听到的内容有些困难。你知道有什么方法可以将英文音频转换成文字吗&#…

SpringBoot内置Logback日志的学习

一、日志级别 日志级别有TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF。 TRACE级别最低 DEBUG 的级别低&#xff0c;当需要打印调试信息的话&#xff0c;就用这个级别&#xff0c;不建议在生产环境下使用。 INFO 的级别高一些&#xff0c;当一些重要的信息需要打印的时候&#x…

虹科多功能电流电压采集方案

01电流电压采集基础概念和应用 电流采集、电压采集、电能充电量测试和功率测试在不同领域都有着广泛的应用 ▲汽车电子&#xff1a;电池管理系统BMS、发动机控制系统、车身电子系统 ▲航空航天&#xff1a;飞行控制系统&#xff0c;航空电源管理系统、航空电子设备 ▲消费电…

如何学习和提升使用编程语言的能力? - 易智编译EaseEditing

学习编程语言并提升编程能力需要一定的学习方法和实践。以下是一些方法可以帮助你提升编程语言能力&#xff1a; 学习基本语法&#xff1a; 了解编程语言的基本语法和关键概念。可以通过阅读官方文档、教程、书籍或在线资源来学习。 编写代码&#xff1a; 编写实际的代码是提…

入门孪生网络Siamese Network,我将会分几个博客来逐步阐述我对孪生网络的理解和应用---初步介绍0

文章目录 前言一、孪生网络&#xff08;Siamese Network)的基本概念二、孪生网络&#xff08;Siamese Network)的优点三、利用孪生网络进行故障诊断/分类的思路假如我有一堆数据&#xff0c;它可以是轴承故障数值数据&#xff0c;也可以是图像数据&#xff0c;我想进行二分类&a…

ESP32-C2-12模组 AT固件例程

ESP32C2 AT固件使用 ESP32 C2模组&#xff0c;如图1-1所示 图1-1 ESP32 C2模组 ESP32 C2开发板&#xff0c;如图1-2所示 图1-2 ESP32 C2开发 方案亮点 1、完整的 WiFi 子系统&#xff0c;符合 IEEE 802.11b/g/n 协议&#xff0c;具有 Station 模式、SoftAP 模式、SoftAP Stat…

Vue中如何只传递一个人员Name同时把人员Id也传递过去

前言&#xff1a; 根据项目需求&#xff0c;在修改功能中&#xff0c;要求展示一个人员的下拉框&#xff0c;但是又要把人员ID在点击提交时传递过去&#xff0c;一般这种情况有2种解决方法&#xff1a;一是 通过map遍历匹配&#xff1b;二是 在选中人员时将人员ID获取到&#x…

编辑和校对魔法:让文字焕发生机的秘诀

编辑和校对是写作过程中的关键环节&#xff0c;可以让你的文字更加精炼、清晰、引人入胜。以下是一些编辑和校对的秘诀&#xff0c;可以让你的文字焕发生机。 1.保持客观 从读者的角度审视文章&#xff0c;保持客观和中立。确保内容清晰、观点明确&#xff0c;同时避免主观情感…

运筹系列81:LKH代码分析

1. 基本数据结构 基础的node定义在LKH.h中 用于2-level tree的segment定义如下&#xff1a; LKH可以使用3种数据结构&#xff0c;默认是2-level tree&#xff1a; 2-level tree的flip操作&#xff08;即2-opt算子&#xff09;&#xff0c;在Flip_SL.c中&#xff0c;特殊的地…