vector容器 (20221115)

news2025/7/4 18:59:49

一、vector容器

1、功能:与数组非常相似,也称为单端数组。

2、区别:数组是静态空间,vector可以动态扩展。

动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,将原数据拷贝到新空间,释放原空间。

3、vector迭代器是支持随机访问的迭代器

4、构造函数

5、vector的容量和大小

函数原型:

empty(); 判断元素是否为空

capacity(); 容器的容量

size(); 返回容器中元素个数

resize(int num);重新指定容器的长度num,若变长,则以默认值填充,若变短,则删除超出容器长度的元素

resize(int num,elem); 重新指定容器的长度num,若变长,则以elem填充,若变短,则删除超出容器长度的元素.

6、vector的插入和删除

push_back(ele); 尾部插入

pop_back();尾部删除

insert(const_iterator pos,ele); 迭代器指向位置pos插入元素ele

insert(const_iterator pos,int count,ele); 迭代器指向位置pos插入count个元素ele

erase(const_iterator pos); 删除迭代器指向元素

erase(const_iterator start, const_iterator end); 删除迭代器指向区间元素

clear();删除容器中全部元素

7、vector的数据存取

at(int idx); //返回容器中idx所指的数据

operator[]; //返回索引idx所指的数据

front(); //返回容器第一个数据元素

back();//返回最后一个元素

代码:

#include<iostream>

using namespace std;

#include<vector>

void printVector(vector<int>&v)

{

    for (int i = 0; i < v.size(); i++)

    {

        cout << v[i] << " ";

    }

    cout << endl;

    for (int i = 0; i < v.size(); i++)

    {

        cout << v.at(i) << " ";

    }

    cout << endl;

}

void test01()

{

    vector<int>v1;

    for (int i = 0; i < 10; i++)

    {

        v1.push_back(i);

    }

    printVector(v1);

    //输出第一个元素

    cout << "第一个元素为:" << v1.front() << endl;

    cout << "最后一个元素为:" << v1.back() << endl;

}

8、vector互换容器

实现两个容器的互换

函数原型:swap(vec);//将vec与本身的元素互换

代码:

void printVector(vector<int>&v)

{

    for (int i = 0; i < v.size(); i++)

    {

        cout << v[i] << " ";

    }

    cout << endl;

    for (int i = 0; i < v.size(); i++)

    {

        cout << v.at(i) << " ";

    }

    cout << endl;

}

void test01()

{

    vector<int>v1;

    for (int i = 0; i < 10; i++)

    {

        v1.push_back(i);

    }

    cout << "交换前" << endl;

    printVector(v1);

    vector<int>v2;

    for (int i = 11; i < 20; i++)

    {

        v2.push_back(i);

    }

    printVector(v2);

    cout << "交换后:" << endl;

    v1.swap(v2);

    printVector(v1);

    printVector(v2); 

}

效果:

实际作用:

巧用swap()可以收缩内存空间:

void test02()

{

    vector<int>v3;

    for (int i = 0; i < 100000; i++)

    {

        v3.push_back(i);

    }

    cout << "v3的大小为:" << v3.size() << endl;

    cout << "v3的容量为:" << v3.capacity()<< endl;



    //重新指定大小

    v3.resize(3);

    cout << "v3的大小为:" << v3.size() << endl;

    cout << "v3的容量为:" << v3.capacity() << endl; //此时大小为3  容量为138255 浪费空间

    //用swap收缩内存

    vector<int>(v3).swap(v3);

    //vector<int>(v3)是以v3作为拷贝对象,拷贝构造一个匿名对象,

    //然后做一个容器之间的交换,交换后v3指向的是交换前匿名对象所指向的空间,容量为3,而匿名对象指向的是原本v3的空间,容量大小为138255

    //匿名对象的特点:使用完毕后 系统会自动回收其空间

    cout << "v3的大小为:" << v3.size() << endl;

    cout << "v3的容量为:" << v3.capacity() << endl;//此时大小为3  容量为3 浪费空间

}

9、预留空间

功能:减少vector在动态扩展时的扩展次数

reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问。

//利用reserve预留空间

void test02()

{

    vector<int>v;

    int num=0;//统计开辟次数

    v.reserve(100000);

    int *p = NULL;

    for (int i = 0; i < 100000; i++)

    {

        v.push_back(i);

        if (p != &v[0])//如果p不指向首地址,则使其指向首地址

        {

            p = &v[0];

            num++;

        }

    }

    cout << "次数:" << num << endl; //没有预留 num=30 预留后num=1

}

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

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

相关文章

Django框架的电商商城的设计与实现python语言

摘要 随着计算机技术&#xff0c;网络技术的迅猛发展&#xff0c;Internet 的不断普及&#xff0c;网络在各个领域里发挥了越来越重要的作用。特别是随着近年人民生活水平不断提高&#xff0c;电商商城给商家的业务带来了更大的发展机遇。 在经济快速发展的带动下&#xff0c;服…

网络读卡器开发,带你智能感知无线设备

随着物联网行业的快速发展&#xff0c;针对网络读卡器的技术要求也在不断地提升&#xff0c;为此出现一款体积小、低功耗、高度集成、性能稳定的非接触读卡器&#xff0c;用户不需要进行编程设计&#xff0c;只用发送简单命令&#xff0c;就能完成对卡片的读写。 网路读卡器是智…

通过DataEase行列权限设置实现数据权限管控

在企业的日常经营中&#xff0c;企业人数达到一定数量之后&#xff0c;就需要对企业的层级和部门进行细分&#xff0c;建立企业的树形组织架构。围绕着树形组织架构&#xff0c;企业能够将权限落实到个人&#xff0c;避免企业内部出现管理混乱等情况。而在涉及到数据分析等工作…

浮点数 C语言 IEEE754

知识内化&#xff1a;用自己的语言讲述一遍&#xff0c;把复杂的东西解释得简单透彻 计算机表示浮点数的问题&#xff1a;&#xff08;自己分析一下这个问题&#xff09; 输入是&#xff1a;任意一个浮点数&#xff0c;正无穷到负无穷&#xff0c;包括整数部分和小数部分 2222…

支持I2S数字音频接口;音频功放芯片NTP8835C

韩国耐福数字功放系列其NTP8835C芯片采用I2S数字输入接口&#xff0c; 可用于音频应用场合&#xff0c;例如蓝牙&#xff0f;WIFI音箱、音响设备&#xff0c;投影仪、高清电视、会议系统等。通过I2S传输数字音频信号&#xff0c; 能够还原和输出高保真高质量的音频信号。 NTP88…

阿里SQL又爆神作数据生态:MySQL复制技术与生产实践笔记

前言 在开源国产数据库崛起的今天&#xff0c;这本佳作《数据生态:MySQL复制技术与生产实践》&#xff0c;无疑将为MySQL在各行业的推广和使用做出贡献&#xff0c;这也是像我这样的从商业数据库转到开源数据库的从业者的福音。 MySQL能够成为“最流行的开源数据库”&#xf…

【数据结构】图—图的存储结构(邻接矩阵法、邻接表法、邻接多重法、十字链表法)

图的存储结构1 邻接矩阵法2 邻接表法3 十字链表法4邻接多重法1 邻接矩阵法 主要存储的是点&#xff0c;所以空间复杂度和点(v)有关 对象&#xff1a;稠密图、有向图、无向图 表示唯一、适合稠密图空间复杂度&#xff1a;O&#xff08;v^2&#xff09;无向图邻接矩阵一定是一个…

Docker环境安装OWT Server[Open WebRTC Toolkit]

Docker环境安装OWT Server[Open WebRTC Toolkit] 目录 Docker环境安装OWT ServerDocker自定义开发OWT Server wiki&#xff08;照着操作会有不注意的坑&#xff09;&#xff1a;An easy way to quickly evaluate OWT with Docker image 相关文章&#xff1a; Ubuntu环境安装OW…

Emlog评论区显示用户操作系统与浏览器信息教程

近期有不少初入Emlog的站长来咨询Emlog程序的评论区域如何实现获取到评价用户的操作系统和浏览器信息&#xff0c;其实要实现该功能也很简单&#xff0c;而且网上也有不少类是的插件。今天&#xff0c;冬镜就和大家聊聊不用插件来实现获取评论用户操作系统与浏览器信息。改造前…

软件测试 -- 进阶 3 软件测试设计

我并没有什么方法&#xff0c;只是对于一件事情很长时间很热心地去考虑罢了。-- 牛顿 1. 设计是什么&#xff1f; 设计是有目标、有计划的创造和创作活动&#xff0c;按特定需求制定解决方案。设计指把头脑中的设想/想法通过合理的规划、周密的计划、有效的方式表达出来的过程…

【C#】生成WebAPI实现简单调用本地数据库

需求&#xff1a;通过C#生成WebAPI&#xff0c;供微信小程序调用以访问本地数据库(微信小程序部分下次再说&#xff0c;今天先记录一下C#生成WebAPI相关的坑与注意点)。 数据库&#xff1a;SQL Server Web服务器&#xff1a;IIS 编程语言&#xff1a;C# IDE&#xff1a;VS20…

微信|零到一打造一款与微信互通的自动聊天机器人应用

本文干货充足篇幅较长&#xff0c;建议收藏后阅读避免迷路。文末可获取【自动聊天机器人源码和Demo】。 本教程教大家使用即构 ZIM SDK 创建一个能与微信端互动消息的自动聊天机器人应用。ZIM SDK可广泛应用于娱乐社交、电商购物、在线教育、互动直播等多种场景下即时通讯功能实…

R语言中的函数18:readxl::read_excel(), read_xls(),read_xlsx()

文章目录read_excel(), read_xls()和read_xlsx()函数介绍实例实例1利用read_xls读取文件实例2指定读取数据的范围range实例3读取有缺失值的数据实例4read_xls和read_xlsx需要对应的文件类型实例5read_excel的使用read_excel(), read_xls()和read_xlsx()函数介绍 read_excel(),…

设计模式----单例模式

设计模式之单例模式 文章目录设计模式之单例模式一. 简介1. 什么是单例模式&#xff1f;2. 单例模式的应用场景&#xff1f;3. 单例模式的类型&#xff1f;二. 单例模式的几种写法1. 饿汉式2. 懒汉式3. 懒汉式&#xff08;线程安全性能优化&#xff09;4. 使用volatile防止指令…

【ARM】Bootloader的调试

Bootloader 为啥要做一个bootloader&#xff0c;因为最近客户调试MCU中&#xff0c;中断向量表和代码不设置一个区域内&#xff0c;在0x0的地址放置中断向量表&#xff0c;并在0x18000000的地址放置代码&#xff0c;发现会有一点问题&#xff0c;想测试一下在0x18000000的地址…

Linux C/C++异常处理方法

简介 C/C属于较为接近底层的语言&#xff0c;不像Java等“高级”语言&#xff0c;所有异常都能catch住&#xff08;例如常见的core dumped&#xff09;异常&#xff1a; int first_func() {int* error_integer nullptr;return *error_integer; } 对于异常&#xff0c;首要任…

传统 Web 框架部署与迁移

与其说 Serverless 架构是一个新的概念&#xff0c;不如说它是一种全新的思路&#xff0c;一种新的编程范式。 但是原生的 Serverless 开发框架却非常少。以 Web 框架为例&#xff0c;目前主流的 Web 框架“均不支持 Serverless 模式部署”&#xff0c;因此我们一方面要尝试接…

跳槽or裸辞?2022年真不建议···

2022年是个“难过”的一年。 疫情、经济寒冬、房价跳水、基金股票一片红。其实这些都是连锁反应。 企业不好过&#xff0c;也会引发一系列裁人潮&#xff0c;其实最近挺多小伙伴反映过&#xff0c;今年过的如牛马&#xff0c;一人干活量顶仨。想辞职躺平&#xff0c;又没有绝…

BurpSuit官方实验室之信息泄露

BurpSuit官方实验室之信息泄露 这是BurpSuit官方的实验室靶场&#xff0c;以下将记录个人信息泄露共5个Lab的通关过程 Web Security Academy: Free Online Training from PortSwigger lab1&#xff1a; Information disclosure in error messages 错误消息中的信息泄露 在…

从金鸡百花电影节,看“鼓浪屿元宇宙”的元力、魅力与想象力

文|智能相对论 作者|青月 元宇宙的走红&#xff0c;始于2021年3月10日Roblox在美上市&#xff0c;这个和现实世界相平行又相交叉的虚拟世界开始引起市场的注意&#xff0c;并迅速风靡全球。 虽然2022年&#xff0c;关于元宇宙的探索已经进入了一个相对务实的阶段&#xff0c…