STL——vector详解

目录

💡基本概念

💡存放内置数据类型

💡存放自定义数据类型

💡存放自定义数据类型指针

💡vector容器嵌套容器

💡vector构造函数

💡vector赋值操作

💡vector容量和大小

💡vector插入和删除

💡vector数据存取

💡vector互换容器

💡 基本使用

💡 实际应用

💡vector预留空间


💡基本概念

功能:

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

vector与普通数组区别:

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

动态扩展:

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

💡存放内置数据类型

容器:         vector
算法:        for each
迭代器:        vector<int>::iterator

💡存放自定义数据类型

class person
{
public:person(string name, int age){this->m_name = name;this->m_age = age;}string m_name;int m_age;
};

	vector<Person>v;//向容器中添加数据Person p1("aaa", 10);Person p2("bbb", 20);Person p3("ccc", 30);v.push_back(p1);v.push_back(p2);v.push_back(p3);

💡存放自定义数据类型指针

💡vector容器嵌套容器

类似于二维数组

	vector<vector<int>>v;//创建小容器vector<int>v1;vector<int>v2;vector<int>v3;

	//添加数据for (int i = 0; i < 4; i++){v1.push_back(i + 1);v2.push_back(i + 2);v3.push_back(i + 3);}//将小容器插入到大容器v.push_back(v1);v.push_back(v2);v.push_back(v3);

💡vector构造函数

功能描述:

  • 创建vector容器

函数原型:

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

	vector<int> v1;//默认构造,无参构造for (int i = 0; i < 10; i++){v1.push_back(i);}Print(v1);//通过区间的方式构造vector<int>v2(v1.begin(), v1.end());Print(v2);//n个elem构造vector<int>v3(10, 100);//10个100Print(v3);//拷贝构造vector<int>v4(v1);Print(v4);

💡vector赋值操作

功能描述:

  • 给vector容器进行赋值

函数原型:

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

	vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}Print(v1);//赋值vector<int>v2;v2 = v1;Print(v2);//assignvector<int>v3;v3.assign(v1.begin(), v1.end());Print(v3);//n个elemvector<int>v4;v4.assign(10, 100);//10个100Print(v4);

💡vector容量和大小

功能描述:

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

函数原型:

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

	vector<int>v1;cout << "赋值前v1的容量是:" << v1.capacity() << endl;for (int i = 0; i < 10; i++){v1.push_back(i);}Print(v1);if (v1.empty())//为真,代表容器为空{cout << "为空" << endl;}else{cout << "不为空" << endl;cout << "赋值后v1的容量是:" << v1.capacity()<< endl;//capacity>=size,size是容器内的元素个数cout << "v1的大小是:" << v1.size()<<endl;}//重新指定大小v1.resize(15);Print(v1);//如果重新指定的大小比原来大,默认用0来填充新增的空间v1.resize(16, 100);Print(v1);//可以指定填充数v1.resize(5);//如果重新指定的大小比原来小,则会删除多余的部分Print(v1);

💡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();       //删除容器中所有元素

	vector<int>v1;//尾插for (int i = 0; i < 10; i++){v1.push_back(i);}v1.push_back(100);Print(v1);//尾删v1.pop_back();//删除100Print(v1);//插入v1.insert(v1.begin(), 100);//参数1是迭代器,参数2是要插入的元素,插入在指定位置之前Print(v1);v1.insert(v1.begin(), 2, 1000);//插入2个1000Print(v1);//删除v1.erase(v1.begin());//删除第一个1000 (参数也是迭代器)Print(v1);v1.erase(v1.begin(), v1.begin() + 3);Print(v1);//清空v1.clear();Print(v1);

💡vector数据存取

功能描述:

  • 对vector中的数据的存取操作

函数原型:

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

	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;

💡vector互换容器

功能描述:

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

函数原型:

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

💡 基本使用

	//基本使用vector<int>v1;for (int i = 0; i < 10; i++){v1.push_back(i);}cout << "交换前:" << endl;Print(v1);vector<int>v2;for (int i = 10; i < 20; i++){v2.push_back(i);}Print(v2);cout << "交换后:" << endl;v1.swap(v2);Print(v1);Print(v2);

💡 实际应用

	//实际用途//巧用swap收缩内存空间vector<int>v;for (int i = 0; i < 10000; i++){v.push_back(i);}cout << "capacity:" << v.capacity() << endl;cout << "size:" << v.size() << endl;v.resize(3); //重新指定大小,size变小之后,capacity不变cout << "capacity:" << v.capacity() << endl;cout << "size:" << v.size() << endl;//巧用swap收缩内存vector<int>(v).swap(v);cout << "capacity:" << v.capacity() << endl;cout << "size:" << v.size() << endl;

💡vector预留空间

功能描述:

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

函数原型:

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

	vector<int>v;//利用reserve预留空间v.reserve(10000);int cnt = 0;//统计开辟空间的次数int* p = NULL;for (int i = 0; i < 10000; i++){v.push_back(i);if (p != &v[0])//每次重新开辟扩容时,会找到一块新的空间,对应一个新的地址{p = &v[0];cnt++;}}cout << "cnt=" << cnt << endl;

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

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

相关文章

大数据技术原理与应用期末考试题

大数据技术原理与应用期末考试题 一、单选题 1.下面哪个选项属于大数据技术的“数据存储和管理”技术层面的功能? A、利用分布式文件系统、数据仓库、关系数据库等实现对结构化、半结构化和非结构化海量数据的存储和管理 B、利用分布式并行编程模型和计算框架,结合机器学习…

YOLOv8改进 | 主干篇 | ConvNeXtV2全卷积掩码自编码器网络

一、本文介绍 本文给大家带来的改进机制是ConvNeXtV2网络,ConvNeXt V2是一种新型的卷积神经网络架构,它融合了自监督学习技术和架构改进,特别是加入了全卷积掩码自编码器框架和全局响应归一化(GRN)层。我将其替换YOLOv8的特征提取网络,用于提取更有用的特征。经过我的实…

西电期末1018.logistic方程

一.题目 二.分析与思路 根据题目递归即可&#xff0c;用while函数判断是否到达1000项&#xff0c;内部用abs函数&#xff08;绝对值函数&#xff09;判断是否收敛&#xff0c;最后按照结果输出即可。 三.代码实现 #include<bits/stdc.h>//万能头 int main() {double …

【SI PI 学习路线图】

一、【题干】 SI/PI基本理论 SI/PI经典书籍 软件操作 Hyperlynx Sigrity SIWAVE HFSS Q3D ADS 相关软件Help文档 二、行动路线图 01 1.信号完整性基本概念介绍 2.时域和频域的关系 3.S参数的介绍 4.仿真实例&#xff1a;S参数仿真 平板项目低速信号仿真 02 1.TDR基本概念…

Flink 任务指标监控

目录 状态监控指标 JobManager 指标 TaskManager 指标 Job 指标 资源监控指标 数据流监控指标 任务监控指标 网络监控指标 容错监控指标 数据源监控指标 数据存储监控指标 JobManager 指标 TaskManager 指标 Job 指标 当使用 Apache Flink 进行流处理任务时&…

NLP基础——中文分词

简介 分词是自然语言处理&#xff08;NLP&#xff09;中的一个基本任务&#xff0c;它涉及将连续的文本序列切分成多个有意义的单元&#xff0c;这些单元通常被称为“词”或“tokens”。在英语等使用空格作为自然分隔符的语言中&#xff0c;分词相对简单&#xff0c;因为大部分…

React实现简单登录

一 实现效果(样式是之前设置的&#xff09; 二 具体实现代码 2.1 Login.js import {useNavigate} from "react-router-dom"; import React from "react"; // import ./style2.cssfunction Login(){const navigateuseNavigate()func…

nginx在国产服务器上stream配置项无法识别的问题

最近在搭建k8sranchar&#xff0c;需要用到nginx做负载均衡&#xff0c;之前在系统中也会用到&#xff0c;之前一直使用http选项&#xff0c;做转发配置。 基本格式如下图所示&#xff1a; 但是在ranchar的安装中默认方式使用stream配置项。 使用yum默认安装的nginx不支持该关…

Yapi安装配置(CentOs)

环境要求 nodejs&#xff08;7.6) mongodb&#xff08;2.6&#xff09; git 准备工作 清除yum命令缓存 sudo yum clean all卸载低版本nodejs yum remove nodejs npm -y安装nodejs,获取资源,安装高版本nodejs curl -sL https://rpm.nodesource.com/setup_8.x | bash - #安装 s…

Spring Cloud Config相关面试题及答案(2024)

1、什么是 Spring Cloud Config&#xff0c;它解决了哪些问题&#xff1f; Spring Cloud Config 是一个为微服务架构提供集中化外部配置支持的项目。它是构建在 Spring Cloud 生态系统之上&#xff0c;利用 Spring Boot 的开发便利性&#xff0c;简化了分布式系统中的配置管理…

现在的人们如何看待数据隐私?

PrimiHub一款由密码学专家团队打造的开源隐私计算平台&#xff0c;专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。 在当前时代&#xff0c;每一次点击、触摸或按键都留下了数字痕迹。但是我们对自己的个人数据几乎没有控制的权限&#xff0c;这让…

百度自由DIY小程序源码:PHP+MySQL组合开发 带完整的搭建教程

随着移动互联网的快速发展&#xff0c;小程序已成为企业与用户互动的重要平台。然而&#xff0c;对于许多中小企业和开发者来说&#xff0c;从零开始开发一款小程序需要投入大量的时间和资源。 以下是部分代码示例&#xff1a; 系统特色功能一览&#xff1a; 1.高度自定义&…

三、C语言中的分支与循环—if语句 (1)

在这一章节中我们的学习内容如下&#xff0c;咱们一步步来。 分支结构 1. if语句 2. 关系操作符 3. 条件操作符 4. 逻辑操作符&#xff1a;&& , || , &#xff01; 5. switch语句 循环结构 6. while循环 7. for循环 8. do-while循环 9. break和conti…

Python 微服务架构指南

概要 微服务架构作为一种设计风格&#xff0c;它将应用程序构建为一套小服务的集合&#xff0c;每个服务实现特定的业务功能&#xff0c;这些服务可以独立部署、扩展并围绕特定业务能力构建。Python 凭借其简洁易读的语法和强大的库生态系统成为实现微服务的受欢迎选择。本文将…

机器学习在缺陷检测中的突破与实践

机器学习在缺陷检测中的突破与实践主要体现在以下几个方面&#xff1a; 自动化检测&#xff1a;机器学习技术能够自动化地处理大量的数据&#xff0c;并通过学习和识别各种缺陷的模式和特征&#xff0c;实现自动化检测。这大大提高了缺陷检测的效率和准确性&#xff0c;减少了人…

【番外】【Airsim in Windows ROS in WSL2-Ubuntu20.04】环境配置大全

【番外】【Airsim in Windows &ROS in WSL2-Ubuntu20.04】环境配置大全 【前言&#xff08;可省略不看&#xff09;】1.在windows上面部署好UE4AirSim联合仿真环境2.在windows上面部署wsl2系统以及在wsl2上面部署ubuntu系统3.安装好ubuntu系统之后&#xff0c;目前只能在命…

河北首例:黑科技人工心脏为终末期心衰患者带来新希望

近日&#xff0c;河北工程大学附属医院心脏中心成功完成河北省首例左心室辅助装置植入&#xff08;人工心脏&#xff09;&#xff0c;为终末期心衰患者提供了除心脏移植以外新的解决方案。 55岁刘女士因间断胸闷气短7年&#xff0c;诊断为扩张型心肌病&#xff0c;经过规范的“…

Unity AVProVideo安卓播放视频问题

Pico4播放全景8K视频播放不了&#xff0c;普通视频也播放不了解决方案&#xff1a; 1.Vulkan去掉&#xff0c;或者优先级放下面2.Pico4打包ARM64&#xff0c;插件里arm64里的几个库都设置arm64&#xff0c;平台选择安卓 Pico其他设置参考官方文档即可。

LDD学习笔记 -- Linux内核模块

LDD学习笔记 -- 内核模块 简介LKM类型Static Linux Kernel ModuleDynamic Linux Kernel ModuleLKM编写语法 syntax详细描述内核头文件用户空间头文件Module Initialization FunctionModule Cleanup FunctionKeyword & Tag宏 __init __exitLKM入口注册Module Metadate&#…

win10提示“KBDSF.DLL文件缺失”,游戏或软件无法启动运行,快速修复方法

很多用户在日常使用电脑的时候&#xff0c;或多或少都遇到过&#xff0c;在启动游戏或软件的时候&#xff0c;Windows桌面会弹出错误提示框“KBDSF.DLL文件缺失&#xff0c;造成软件无法启动或运行&#xff0c;请尝试重新安装解决”。 首先&#xff0c;先来了解DLL文件是什么&a…