vector容器

1.  vector基本概念

1.1 功能:

vector数据结构和数组非常相似,也称为单端数组

vector与普通数组区别:

不同之处在于数组是静态空间,而vector可以动态扩展

动态扩展:

并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间

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

2. vector构造函数

功能描述:

创建vector容器

函数原型:

vector<T> v; //采用模板实现类实现,默认构造函数
vector(v.begin(), v.end()); //将v[begin(), end())区间中的元素拷贝给本身。
vector(n, elem); //构造函数将n个elem拷贝给本身。
vector(const vector &vec); //拷贝构造函数。

总结:vector的多种构造方式没有可比性,灵活使用即可

示例:

vector_main1.cpp

#include <iostream>
#include <vector>
using namespace std;//vector容器的构造void printVector(vector<int> &v) {for (vector<int>::iterator it = v.begin(); it != v.end();it++) {cout << *it << " ";}cout << endl;
}void test01() {vector<int> v1;//默认构造,无参构造for (int i = 0; i < 10;i++) {v1.push_back(i);}printVector(v1);//通过区间方式进行构造vector<int>v2(v1.begin(), v1.end());printVector(v2);//n个elem方式构造vector<int>v3(10, 100);printVector(v3);//拷贝构造vector<int>v4(v3);printVector(v4);
}int main()
{test01();return 0;
}

3. vector赋值操作

功能描述:

给vector容器进行赋值

函数原型:

vector& operator=(const vector &vec); //重载等号操作符
assign(beg, end); //将[beg, end)区间中的数据拷贝赋值给本身。
assign(n, elem); //将n个elem拷贝赋值给本身。

总结: vector赋值方式比较简单,使用operator=,或者assign都可以

示例

vector_main2.cpp

#include<iostream>
using namespace std;
#include <vector>void printVector(vector<int>& v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}//vector赋值
void test01()
{vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}printVector(v1);//赋值   operator=vector <int>v2;v2 = v1;printVector(v2);// assignvector<int>v3;v3.assign(v1.begin(), v1.end());printVector(v3);//n个elem 方式赋值vector<int>v4;v4.assign(10, 100);printVector(v4);
}int main() {test01();system("pause");return 0;
}

4. vector容量和大小

功能描述:

对vector容器的容量和大小操作

函数原型:

empty(); //判断容器是否为空
capacity(); //容器的容量
size(); //返回容器中元素的个数
resize(int num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。
//如果容器变短,则末尾超出容器长度的元素被删除。
resize(int num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。
//如果容器变短,则末尾超出容器长度的元素被删除

总结:

判断是否为空 --- empty

返回元素个数 --- size

返回容器容量 --- capacity

重新指定大小 --- resize

示例:

vector_main3.cpp

#include <iostream>
#include <vector>using namespace std;//vector的容量和大小void printVector(vector<int> &v) {for (vector<int>::iterator it = v.begin(); it != v.end();it++) {cout << *it << " ";}cout << endl;
}void test() {vector<int> v1;for (int i = 0; i < 10;i++) {v1.push_back(i);}printVector(v1);//判断是否容器为空if (v1.empty()) {cout << "为空" << endl;}else {cout << "不为空" << endl;//查看容量cout << "v1的容量大小:" << v1.capacity() << endl;//查看大小cout << "v1的大小:" << v1.size() << endl;}//重新指定大小v1.resize(15 , 100); //利用重载版本,可以指定默认填充值,参数2printVector(v1);//如果重新指定的比原来长了,默认用0填充新的位置v1.resize(5);printVector(v1); //如果重新指定的比原来短了,超出部分会删除掉}int main() 
{test();return 0;
}

5. vector插入和删除

功能描述:

对vector容器进行插入、删除操作

函数原型:

push_back(ele); //尾部插入元素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); //删除迭代器从start到end之间的元素
clear(); //删除容器中所有元素

总结

尾插 --- push_back

尾删 --- pop_back

插入 --- insert (位置迭代器)

注意迭代器可以加减,然后就可以指定任意位置插入删除了

删除 --- erase (位置迭代器)

清空 --- clear

示例:

vector_main4.cpp

#include <iostream>
#include <vector>
using namespace std;//vector 插入和删除的操作void printVector(vector<int> &v) {for (vector<int>::iterator it = v.begin(); it != v.end();it++) {cout << *it << " ";}cout << endl;
}void test() {vector<int> v1;//尾插v1.push_back(10);v1.push_back(20);v1.push_back(30);v1.push_back(40);v1.push_back(50);//遍历printVector(v1);//尾删v1.pop_back();printVector(v1);//迭代器指向位置插入元素,注意迭代器相当于指针可以加偏移量v1.insert(v1.begin(), 100);printVector(v1);//在中间的任意位置插入v1.insert(v1.begin()+2, 100);printVector(v1);//删除v1.erase(v1.begin());printVector(v1);//区间删除v1.erase(v1.begin() + 1, v1.end() - 1);printVector(v1);//v1.clear();//清空容器
}int main()
{test();return 0;
}

6. vector数据存取

功能描述:

对vector中的数据的存取操作

函数原型:

at(int idx); //返回索引idx所指的数据
operator[]; //返回索引idx所指的数据
front(); //返回容器中第一个数据元素
back(); //返回容器中最后一个数据元素

总结:

除了用迭代器获取vector容器中元素,[ ]和at也可以

front返回容器第一个元素

back返回容器最后一个元素

示例:

vector_main5

#include<iostream>
using namespace std;
#include <vector>
//vector容器 数据存取void test01()
{vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}//利用[]方式访问数组中元素for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;//利用at方式访问元素for (int i = 0; i < v1.size(); i++){cout << v1.at(i) << " ";}cout << endl;//获取第一个元素cout << "第一个元素为: " << v1.front() << endl;//获取最后一个元素cout << "最后一个元素为: " << v1.back() << endl;
}int main() {test01();system("pause");return 0;
}

7. vector互换容器

功能描述:

实现两个容器内元素进行互换

函数原型:

swap(vec); // 将vec与本身的元素互换

总结:swap可以使两个容器互换,可以达到实用的收缩内存效果

示例

vector_main6

#include<iostream>
using namespace std;
#include <vector>//互换容器void printVector(vector<int>&v)
{for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}//1、基本使用
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 = 10; i > 0; i--){v2.push_back(i);}printVector(v2);cout << "交换后: " << endl;v1.swap(v2);printVector(v1);printVector(v2);}//2、实际用途
//巧用swap可以收缩内存空间
void test02()
{vector<int>v;for (int i = 0; i < 100000; i++){v.push_back(i);}cout << "v的容量为: " << v.capacity() << endl;cout << "v的大小为: " << v.size() << endl;v.resize(3); //重新指定大小cout << "v的容量为: " << v.capacity() << endl;cout << "v的大小为: " << v.size() << endl;//巧用swap收缩内存//解释这段代码,首先呢看vector<int>(v)这个是匿名对象,我们使用v给匿名对象做初始化(这个初始化只会按照v的所用空间的大小进行初始化)//所以也就是匿名对象 就被初始化为了3,并且指向这个空间,然后使用.swap(v)来进行容器交换,所以我们的v容器就指向了3这个大小的空间//匿名对象也就被指向了v原来指向的空间(也就是那个大空间),到这里你可能有个疑问就是,那我的匿名空间不就变大了嘛,一样空间浪费啊//但是记住,匿名对象有个特点就是,一旦执行完成后,它所占用的空间就会被回收了vector<int>(v).swap(v); cout << "v的容量为: " << v.capacity() << endl;cout << "v的大小为: " << v.size() << endl;
}int main()
{test01();test02();return 0;
}

8. vector预留空间

功能描述:

减少vector在动态扩展容量时的扩展次数

函数原型:

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

总结:如果数据量较大,可以一开始利用reserve预留空间

示例:

vector_main7.cpp

#include<iostream>
using namespace std;
#include <vector>//vector容器 预留空间
void test01()
{vector<int>v;//利用reserve预留空间v.reserve(100000);//防止因为空间不够而使系统多次开辟空间int num = 0; //统计开辟空间次数int* p = NULL;for (int i = 0; i < 100000; i++){v.push_back(i);//解释这个统计次数的算法//因为开辟空间肯定会设计空间的变换,所以我们设置一个指针执行空间的首地址//一旦空间重新开辟,指针是不是就不会指向&v[0]也就是首地址了,就说明空间开辟了一次if (p != &v[0]){p = &v[0];num++;}}cout << "num = " << num << endl;
}int main() {test01();system("pause");return 0;
}

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

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

相关文章

视频讲解:优化柱状图

你好&#xff0c;我是郭震 AI数据可视化 第三集&#xff1a;美化柱状图&#xff0c;完整视频如下所示&#xff1a; 美化后效果前后对比&#xff0c;前&#xff1a; 后&#xff1a; 附完整案例源码&#xff1a; util.py文件 import platformdef get_os():os_name platform.syst…

方舟基金:若美机构按最大夏普率配置比特币,则有望将其推升至230-250万美元...

号外&#xff1a;教链内参2.12《方舟基金重磅报告〈大胆想象2024〉全文pdf》 方舟基金&#xff08;Ark Invest&#xff09;的木头姐&#xff08;Cathie Wood&#xff09;是业内的老熟人了。她一向以大胆的预测而著称。比如就在2023年10月份&#xff0c;木头姐在采访中就曾直言&…

​​​​​​​C#系列-C#EF框架的优缺点+针对大数据处理的优化(19)

C#EF框架的优缺点 C# EF&#xff08;Entity Framework&#xff09;框架的优缺点如下&#xff1a; 优点&#xff1a; 简单易用&#xff1a;EF框架提供了丰富的API和工具&#xff0c;使得开发者可以轻松地实现数据库的增删改查等操作&#xff0c;无需编写繁琐的SQL语句。对象化…

MIT-BEVFusion系列七--量化2_Camera、Fuser、Decoder网络的量化

目录 Camera 量化Camera Backbone (Resnet50) 量化替换量化层&#xff0c;增加residual_quantizer&#xff0c;修改bottleneck的前向对 Add 操作进行量化 Camera Neck (GeneralizedLSSFPN) 量化将 Conv2d 模块替换为 QuantConv2d 模块Camera Neck 中添加对拼接操作的量化替换 C…

STM32自学☞对射式红外传感器计数

infrared_count.c文件 /* 编写步骤 一、初始化函数 1.开启GPIO、AFIO时钟 (NVIC和EXIT不需要开启&#xff0c;因为EXIT时钟一直处于开启状态&#xff0c;而NVIC是内核里的外设和CPU处在一起且RCC管理的是内核外的外设&#xff0c;综上所述&#xff0c;所以不用开启) 2.配…

【机器学习】卷积和反向传播

一、说明 自从 AlexNet 在 2012 年赢得 ImageNet 竞赛以来&#xff0c;卷积神经网络 (CNN) 就变得无处不在。从不起眼的 LeNet 到 ResNets 再到 DenseNets&#xff0c;CNN 无处不在。 您是否想知道 CNN 的反向传播中会发生什么&#xff0c;特别是反向传播在 CNN 中的工作原理。…

Stream流学习笔记

Stream流 创建流中间操作1、filter2、map3、distinct4、sorted5、limit6、skip7、flatMap 终结操作1、forEach2、count3、max&min4、collect5、查找与匹配 创建流 单例集合&#xff1a;集合对象.stream() List<Integer> list new ArrayList<>(); Stream<…

uniapp禁止截屏录屏/投屏功能(adb投放失效)

经过测试代码写在App.vue会失效,请写在符合逻辑的界面 uni-app 实现安卓防截屏 在uniapp中实现 要在App中全局禁止截屏&#xff0c;那么可以在App.vue中调用 如果想要某个页面防截屏就在某个页面调用&#xff0c;但是在离开这个页面的时候要恢复截屏&#xff0c;否则全局…

C语言:详解操作符(下)

上一篇链接&#xff1a;C语言&#xff1a;详解操作符&#xff08;上&#xff09;摘要&#xff1a; 在上篇文章中&#xff0c;我们已经讲过位操作符等涉及二进制的操作符&#xff0c;这些有助于帮助我们后期理解数据如何在计算机中运算并存储&#xff0c;接下来本篇将更多的讲述…

OpenCV学习路线图

下面是针对初学者设计的一个学习路线图&#xff1a; 第1周&#xff1a;计算机视觉和OpenCV概述 介绍计算机视觉及其应用领域讨论OpenCV的历史、特点和工作原理OpenCV的安装和配置&#xff08;Windows/Linux/macOS&#xff09;了解OpenCV的基本数据结构&#xff08;cv::Mat等&…

如何清理Docker占用的磁盘空间?

在Docker中&#xff0c;随着时间的推移&#xff0c;占用的磁盘空间可能会不断增加。为了保持系统的稳定性和性能&#xff0c;定期清理Docker占用的磁盘空间非常重要。下面将介绍一些清理Docker磁盘空间的方法。 一、清理无用的容器 有时候&#xff0c;我们可能会运行一些临时…

mac docker 宿主机和容器间网络打通

动因 是这样&#xff0c;笔者最近满怀欣喜入手Docker&#xff0c;看着各种文章命令都是不断点头称道&#xff1a;“嗯嗯&#xff0c;不错不错”,在接下来终于准备大干一场的时候碰壁了&#xff0c;主要情况是说在Mac中跑了第一把的时候发现碰到&#xff0c;虚拟机和宿主机居然…

Vue-1

Vue 简介 Vue 是一个用于"构建用户界面(基于数据渲染出用户看到的画面)" 的渐进式框架 基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widt…

SpringBoot 2.7.6 集成Activiti 7.1.0.M6 所需的配置文件

<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 https://…

课时25:内容格式化_常用符号解读_信息传递

3.1.1 信息传递 学习目标 这一节&#xff0c;我们从 重定向、管道符、小结 三个方面来学习。 重定向 重定向符号 在shell脚本中有两类常见的重定向符号&#xff1a; 覆盖式重定向&#xff1a;> 表示将符号左侧的内容&#xff0c;以覆盖的方式输入到右侧文件中< 表示…

c# avalonia 实现正方体翻转效果

在Avalonia中要实现一个正方体的翻转效果&#xff0c;需要利用动画和变换的功能&#xff0c;但由于Avalonia主要是2D UI框架&#xff0c;对3D支持有限。你可以通过2D的方式来近似模拟3D翻转的效果&#xff0c;或者配合像Avalonia3D这样的扩展库来实现。 示例代码大纲如下&#…

C#系列-C#访问WebAPI(11)

在C#中访问Web API通常涉及使用HttpClient类来发送HTTP请求到Web服务器并接收响应。以下是一个简单的示例&#xff0c;展示了如何使用HttpClient来调用一个Web API并获取JSON响应。 首先&#xff0c;确保你的项目中包含了System.Net.Http命名空间。如果你使用的是.NET Core或.…

CentOS7下如何安装Nginx

一、Ngxin是什么 Nginx是一个开源的 Web 服务器&#xff0c;具有反向代理、负载均衡、缓存等功能。它可以作为 HTTP 服务器&#xff0c;将服务器上的静态文件&#xff08;如 HTML、图片&#xff09;通过 HTTP 协议展现给客户端&#xff0c;也可以实现动静分离&#xff0c;把动态…

【后端高频面试题--Nginx篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 后端高频面试题--Nginx篇 什么是Nginx&#xff1f;为什么要用Nginx&#xff1f;为什么Nginx性能…

如何查看电脑连接的wifi的密码

问题 很多时候我们电脑连上wifi之后就把密码忘记了&#xff0c;这个时候如果同事问自己密码是多少&#xff0c;如果作为程序员说不知道是不是感觉有点不好意思&#xff0c;哈哈…… 解决 我使用的是windows电脑&#xff0c;就以windows为例说明下自己是如何查看的。 打开wi…