STL vector 详解

news2024/11/26 13:28:40

STL vector 详解

在这里插入图片描述

STL vector 详解

  • STL vector 详解
  • 一级目录
    • 二级目录
      • 三级目录
  • 1. vector容器
  • 2. vector 容器的初始化函数
    • 1.初始化
    • 2.案例
  • 3. vector的访问函数
    • 1. 成员函数访问
    • 2. 操作符[ ]访问
    • 3.案例
  • 4. vector的插入函数
    • 1. 语法
    • 2. 案例
  • 5. vector的删除函数
    • 1.语法
    • 2. 案例
  • 6. vector的判断函数
  • 7. vector的大小函数
  • 8. vector的其他函数
    • 1. 语法
    • 2. 案例
  • 结尾

一级目录

二级目录

三级目录

1. vector容器

C++中,矢量是-一个十分有用的容器。它能够像容器一样存放各
种类型的对象。也就是说, vector是-个能够存放任意类型的动态
数组。

vector是同一种类型的对象的集合,每个对象都有一个对应的整数
矢量索引值。和string对象-样,标准库将负责管理与存储元素相关的
内存。

把vector称为容器,是因为它可以包含其他对象。一个容器中的所
有对象都必须是同一种类型的。

2. vector 容器的初始化函数

1.初始化

vector name(int nSize,const &t=0);    //创建一个元素为nSize,值为t的向量
vector name(const vector &t );      //复制构造函数

//复制另一个向量[begin,end)区间内的元素到该向量 ,这里要注意的是,区间是左开右闭
vector name(begin,end);     

vector<int>v(10);        //声明一个含10个元素的向量,默认值为0
vector<int> v1(10,2);     //声明一个含10个元素,值为2的向量
vector<int>v3(v2);          //将v2拷贝给v3
vector<int>v4(v2.begin(),v2.begin()+1);       //把v2中的第一个赋值给v4

2.案例

#include<iostream>
#include<vector>
using namespace std;

template<class T>

void Print(vector<T> arr)
{
    for(auto i=0;i<arr.size();i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

 
int main()
{
    //vector声明
    vector<int>arr={1,2,4};
    Print(arr);
    vector<double>arr1={1.2,4.5,6.7,8};
    Print(arr1);
    vector<char>arr2={'a','b','d','e'};
    Print(arr2);
   
    cout<<endl;
    //vector初始化
    vector<int>arr3(4);
    Print(arr3);
    vector<double>arr4(3,2.4);
    Print(arr4);
    vector<char>arr5(arr2);
    Print(arr5);
    vector<int>arr6(arr.begin(),arr.begin()+1);
    Print(arr6);
    return 0;
}

结果:

3. vector的访问函数

1. 成员函数访问

reference at(int pos)//返回pos位置元素的引用

reference front();        //返回首元素的引用

reference back();          //返回尾元素的引用

iterator begin();           //返回向量头指针,指向第一个元素

iterator end();     //返回向量尾指针,指向向量最后一个元素的下一个位置

reverse_ iterator rbegin();   //反向迭代器,指向最后一个元素

reverse_ iterator rend();    //反向迭代器,指向第一个元素之前的位置

#include<iostream>
#include<vector>

using namespace std;

int main()
{
    vector<int>v={2,3,4,1,7};

    cout<<v.at(3)<<endl;

    cout<<*v.begin()<<endl;

    cout<<*v.end()<<endl;

    cout<<v.front()<<endl;

    cout<<v.back()<<endl;

    cout<<*v.rbegin()<<endl;

    cout<<*v.rend()<<endl;
    return 0;
}

结果:
在这里插入图片描述

2. 操作符[ ]访问

vector<int>v1={3,4,5};
cout<<v1[2]<<endl;

3.案例

#include<iostream>
#include<vector>
using namespace std;

template<class T>

void Print(vector<T> arr)
{
    for(auto i=0;i<arr.size();i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

int main()
{
    //vetcor获取向量内部元素的相关函数
    vector<int>arr={1,2,3,4,5,6,7,8,9};
    cout<<arr.at(4)<<endl;
    cout<<arr.front()<<endl;
    cout<<arr.back()<<endl;
    for(auto i=arr.begin();i!=arr.end();i++)
    {
        cout<<*i<<" ";
    }
    cout<<endl;
    for(auto i=arr.rbegin();i!=arr.rend();i++)
    {
        cout<<*i<<" ";
    }
    cout<<endl;
    return 0;
}

4. vector的插入函数

1. 语法


void push_back(const T& x)
//向量尾部增加一个元素X

iterator insert(iterator it,const T& x)
//向量中迭代器指向元素前增加一个元素x

iterator insert(iterator it,int n,const T& x)
//向量中迭代器指向元素前增加n个相同的元素x

iterator insert(iterator it,const_ iterator first,const_ iterator last)
//向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据

2. 案例

#include<iostream>
#include<vector>

using namespace std;

template<class T>

void Print(vector<T> arr)
{
    for(auto i=0;i<arr.size();i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

int main()
{
    //vector向量增加元素的相关函数
    vector<int>arr={1,3,5};
    vector<int>arr1={14,15};
    arr.push_back(3);
    Print(arr);
    arr.insert(arr.begin(),12);
    Print(arr);
    arr.insert(arr.begin()+2,3,10);
    Print(arr);
    arr.insert(arr.begin(),arr1.begin(),arr1.end());
    Print(arr);
    return 0;
}

结果:
在这里插入图片描述

5. vector的删除函数

1.语法

iterator eraseliterator it); 
//删除向量中迭代器指向元素

iterator erase(iterator first, iterator last);
//删除向量中[first,last)中元素

void pop_back();
//删除向量中最后一个元素

void clear();
//清空向量中所有元素

2. 案例

#include<iostream>
#include<vector>
using namespace std;

template<class T>

void Print(vector<T> arr)
{
    for(auto i=0;i<arr.size();i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}


int main()
{
    //vector使用
    vector<int>arr={1,2,4,6,7,5};
    arr.pop_back();
    Print(arr);

    arr.erase(arr.begin());
    Print(arr);

    arr.erase(arr.begin(),arr.begin()+2);
    Print(arr);

    arr.clear();
    Print(arr);
    
    return 0;
}

结果:
在这里插入图片描述

6. vector的判断函数

vector<int>v;
cout<<v.empty()<<endl;

7. vector的大小函数

vector<int>v={3,45,6,2};

cout<<v.size()<<endl; //当前向量的元素个数

cout<<v.max_size()<<endl;  //向量最大能容纳的元素个数

cout<<v.capacity()<<endl;   //当前向量的容量

结果:
在这里插入图片描述

8. vector的其他函数

1. 语法


void swap(vector& t)
//交换两个同类型向量的数据

void assign(int n,const T& x)
//设置向量中前n个元素的值为x

void assign(const_ iterator first,const_ iterator last)
//向量中[first,last)中元素设置成当前向量元素

2. 案例


#include<iostream>
#include<vector>

using namespace std;

template<class T>

void Print(vector<T> arr)
{
    for(auto i=0;i<arr.size();i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

int main()
{
vector<int>v={3,45,6,2};
v.assign(2,0);
Print(v);`

vector<int>v1;
v1.assign(5,8);
Print(v1);

v1.swap(v);
Print(v);
Print(v1);

return 0;
}

结果:
在这里插入图片描述

结尾

文章到这里就结束了,希望可以各位读者可以点赞支持一下。
在这里插入图片描述

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

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

相关文章

Vue el-table 多表格联合显示、合并单元格

原型图 分析 先看内容是三个表&#xff0c;每个表的合并单元格都有点不同。 按照原型图给的内容&#xff0c;第一个是两列&#xff0c;有行合并和列合并&#xff0c;还有表头行合并。 现根据图造出mock数据&#xff0c;然后再写对应的代码。 export const columnVarsData {s…

数据结构day7(2023.7.21)

一、Xmind整理&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;折半查找/二分查找 1-------100 key8850---10075-100int arr[]{12,23,33,45,66,78,99};key7912,23,33,45,66,78,990 6low mid high66, 78, 99mid1 mid highlow99lowhigh…

进程间的通信之管道(匿名管道)

文章目录 进程间通信&#xff08;IPC&#xff09;管道管道特点为什么可以使用管道进行进程间通信管道数据结构匿名管道的使用 管道实例管道读写特点管道设置非阻塞 进程间通信&#xff08;IPC&#xff09; inter process conmmunication &#x1f447;&#x1f447;&#x1f…

现场总线协议转换网关快速选型介绍

现场总线协议是一种用于设备间通信的标准化接口&#xff0c;它支持数字信号和信息在不同设备之间的传输&#xff0c;例如传感器、执行器、控制器等。捷米特总线协议网关支持Profinet/DeviceNet/EthernetIP/EtherCAT/RS485/Profibus/ModbusRTU/TCPIP/CAN/CANopen/CC-Link等工业网…

【教学类-36-09】20230722职业抽卡(midjounery-niji)(涂色、裁剪、游戏)

作品展示&#xff1a; 随机选学具&#xff0c;辨认职业名称、说说工作内容、涂色、裁剪、交换卡片等 灵感来源&#xff1a; 最近在网上搜索“midjounery 简笔画”&#xff0c;发现一条宝藏“关键词”——可以直接生成简笔画风格&#xff08;造型的外边框线加粗&#xff09;的样…

【Elasticsearch】ES简单快速入门

ES简单快速入门 概述 Elasticsearch是一个分布式全文搜索引擎 下载与安装 https://www.elastic.co/cn/downloads/elasticsearch下载之后 解压文件夹&#xff0c;进入bin目录&#xff0c;双击elasticsearch.bat文件 一开始初始化时间比较久&#xff0c;之后初始化之后&…

Istio Pilot源码学习(一):Pilot-Discovery启动流程、ConfigController配置规则发现

本文基于Istio 1.18.0版本进行源码学习 1、Pilot-Discovery工作原理 Pilot-Discovery是Istio控制面的核心&#xff0c;负责服务网格中的流量管理以及控制面和数据面之间的配置下发 Pilot-Discovery从注册中心&#xff08;如Kubernetes&#xff09;获取服务信息并汇集&#xff…

新版UI盲盒抽奖系统源码-带H5端小程序端可打包APP_带安装教程

新版UI盲盒抽奖系统源码-带H5端小程序端可打包APP,这套盲盒系统小白看了一下里面没有搭建教程的&#xff0c;但是盲盒的搭建方式都是差不多的这套就放给你们自己研究了&#xff0c;UI还是很好看的感兴趣可以自己搭建看看。

Vue中TodoList案例_勾选

与上一篇Vue中TodoList案例_添加有三个文件变化了 App.vue&#xff1a;中加了checkTodo方法 <template><div id"root"><div class"todo-container"><div class"todo-wrap"><MyHeader :addTodo"addTodo"/&…

【Linux】信号保存信号处理

前言&#xff1a;对信号产生的思考 上一篇博客所说的信号产生&#xff0c;最终都要有OS来进行执行&#xff0c;为什么&#xff1f;OS是进程的管理者&#xff01;信号的处理是否是立即处理的&#xff1f;在合适的时候 -》那什么是合适的时候&#xff1f;信号如图不是被立即处理…

动态规划入门第3课,经典DP问题2 --- 背包问题

练习1 第1题 方案数 查看测评数据信息 给你n个整数&#xff0c;每个数可选或不选&#xff0c;要求选一些数&#xff0c;使它们的和为S&#xff0c;问有多少种方案&#xff1f; 输入格式 第一行&#xff1a;2个整数n和s&#xff0c;范围都在[1, 100]。 第二行&#xff1a;n个…

spring boot3 集成swagger3

快速开始 | Knife14j 官方的推荐 1. 设置pom.xml 主要是引入nexus-maven&#xff0c;com.github.xiaoymin 2个&#xff0c;cn.hutool&#xff0c;org.springframework <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://ma…

Linux超详细的了解

文章目录 前言Linux的简介不同应用领域的主流操作系统Linux系统历史Linux系统各版本 Linux的安装安装方式介绍安装Linux网卡设置安装SSH连接工具finalShell连接虚拟机Linux和Windows目录结构对比Linux目录介绍 Linux常用命令Linux命令初体验文件目录命令ls命令cd命令cat命令mor…

【Hammerstein模型的级联】快速估计构成一连串哈默斯坦模型的结构元素研究(Matlab代码实现)

&#x1f4a5;1 概述 在许多振动应用中&#xff0c;所研究的系统略微非线性。Hammerstein模型的级联可以方便地描述这样的系统。Hammerstein提供了一种基于指数正弦扫描相位属性的简单方法。 构成一连串Hammerstein模型的结构元素可以在快速估计中起到关键的作用。Hammerstei…

260. 只出现一次的数字 III

题目描述&#xff1a; 主要思路&#xff1a; 首先通过抑或的方式可以将所有两个的数字全部排除&#xff0c;得到两个单个数字的异或值。 接下来将当前得到的异或值取最低一位的1。 分析异或值的每一位&#xff0c;为1的肯定是两个数中一个有一个没有。于是可以通过这一特性将两…

(转载)PID神经元网络解耦控制算法(matlab实现)

​本博客的完整代码获取&#xff1a;https://www.mathworks.com/academia/books/book106283.html​ 1案例背景 1.1PID 神经元网络结构 PID神经元网络从结构上可以分为输人层、隐含层和输出层三层&#xff0c;n个控制量的PID神经元网络包含n个并列的相同子网络,各子网络间既相…

【车载开发系列】AUTOSAR DemComponent和DemDTC

【车载开发系列】AUTOSAR DemComponent和DemDTC 【车载开发系列】AUTOSAR DemComponent和DemDTC 【车载开发系列】AUTOSAR DemComponent和DemDTC一. DemComponent概念二. DemDTC概念三. 常用设置参数DemDTCClass1&#xff09; DemDTCFunctional2&#xff09;DemDTCSeverity3&am…

正点原子ubuntu虚拟机 使用QT虚拟键盘

目录 下载源码使用QT creator 编译移植库文件 http://t.csdn.cn/3QWOj https://blog.csdn.net/LuoLewin/article/details/124283314 本文参考这篇文章&#xff0c;使用正点原子的Ubuntu虚拟机&#xff0c;成功实现QT虚拟键盘&#xff0c;其中使用的方法做下记录&#xff0c;以免…

在Goland上配置GO环境

基本可以参照&#xff1a;https://segmentfault.com/a/1190000023710741 几点说明&#xff1a; 如果项目中有mod文件&#xff0c;然后提示&#xff1a;$GOPATH/go.mod exists but should not,可以如下操作&#xff1a; 设置进入到这个页面&#xff1a; 如何要安装一些包&…

数据结构--图的遍历 BFS

数据结构–图的遍历 BFS 树的广度优先遍历 从 1 结点进行 b f s bfs bfs的顺序&#xff1a; 【1】 【2】【3】【4】 【4】【6】【7】【8】 图的广度优先遍历 从 2 号点开始 b f s bfs bfs的顺序&#xff1a; 【2】 【1】【6】 【5】【3】【7】 【4】【8】 树 vs 图 不存在“回…