C/C++ vector详解

要想了解STL,就必须会看:

cplusplus.comicon-default.png?t=N7T8https://legacy.cplusplus.com/

官方内容全都是英文的,可以参考:

C/C++初始识icon-default.png?t=N7T8https://blog.csdn.net/2301_77087344/article/details/138596294?spm=1001.2014.3001.5501

vector:向量,顺序表,是一个类模板,顺序容器

         vector类常用的函数如下:

1.构造函数


  • vector()://创建一个空vector
  • vector(int nSize)://创建一个vector,元素个数为nSize
  • vector(int nSize,const t& t)://创建一个vector ,元素个数为nSize,且值均为t
  • vector(const vector&)://赋值构造函数
  • vector(begin,end)://赋值[begin,end)区间内另一个数组的元素到vector中

2.增加函数


  • 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)://向量中迭代器指向元素前插入另一个相同类型向量的[firs.last)间的数据

3.删除函数


  • iterator erase(iterator it):删除向量中迭代器指向元素
  • iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
  • void pop_back():删除向量中最后一个元素
  • void clear():情况向量中所有元素

4.遍历函数


  • reference at(int pos)://返回pos位置元素的引用
  • reference front()://返回首元素的引用
  • reference back()://返回尾元素的引用
  • iterator begin()://返回向量头指针,指向第一个元素
  • iterator end()://返回为指针,指向向量最后一个元素的下一个位置
  • reverse_iterator rbein()://反向迭代器,指向最后一个元素
  • reverse_iterator rend()://指向第一个元素之前的位置

5.判断函数


  • bool empty() const://判断向量是否为空,为空,则向量中无元素

6.大小函数


  • int size() const://返回向量中元素的个数
  • int capacity() const: //返回当前向量中宏能容纳的最大元素值
  • int max_size() const://返回最大可允许的vector元素数量值

7.其他函数


  • void swap(vector&);//交换连个同类型的数据
  • void assign(int n,const T& x);//设置向量中第n个元素为x
  • void assign(const_iterator first,const_iterator last)://向量中[first,last)中元素设置成当前向量元素

示例:

1.初始化


  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6. class A  
  7. {  
  8.     //空类  
  9. };  
  10. int main()  
  11. {  
  12.       
  13.     //int型vector  
  14.     vector<int> vecInt;  
  15.   
  16.     //float型vector  
  17.     vector<float> vecFloat;  
  18.   
  19.     //自定义类型,保存类A的vector  
  20.     vector<A> vecA;  
  21.   
  22.     //自定义类型,保存指向类A的指针的vector  
  23.     vector<A*> vecPointA;  
  24.   
  25.     return 0;  
  26. }  
  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6. class A  
  7. {  
  8.     //空类  
  9. };  
  10. int main()  
  11. {  
  12.       
  13.     //int型vector,包含3个元素  
  14.     vector<int> vecIntA(3);  
  15.       
  16.     //int型vector,包含3个元素且每个元素都是9  
  17.     vector<int> vecIntB(3,9);  
  18.   
  19.     //复制vecIntB到vecIntC  
  20.     vector<int> vecIntC(vecIntB);  
  21.       
  22.     int iArray[]={2,4,6};  
  23.     //创建vecIntD  
  24.     vector<int> vecIntD(iArray,iArray+3);  
  25.   
  26.     //打印vectorA,此处也可以用下面注释内的代码来输出vector中的数据  
  27.     /*for(int i=0;i<vecIntA.size();i++) 
  28.     { 
  29.         cout<<vecIntA[i]<<"     "; 
  30.     }*/  
  31.   
  32.     cout<<"vecIntA:"<<endl;  
  33.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  34.     {  
  35.         cout<<*it<<"     ";  
  36.     }  
  37.     cout<<endl;  
  38.   
  39.     //打印vecIntB  
  40.     cout<<"VecIntB:"<<endl;  
  41.     for(vector<int>::iterator it = vecIntB.begin() ;it!=vecIntB.end();it++)  
  42.     {  
  43.         cout<<*it<<"     ";  
  44.     }  
  45.     cout<<endl;  
  46.   
  47.     //打印vecIntC  
  48.     cout<<"VecIntB:"<<endl;  
  49.     for(vector<int>::iterator it = vecIntC.begin() ;it!=vecIntC.end();it++)  
  50.     {  
  51.         cout<<*it<<"     ";  
  52.     }  
  53.     cout<<endl;  
  54.   
  55.     //打印vecIntD  
  56.     cout<<"vecIntD:"<<endl;  
  57.     for(vector<int>::iterator it = vecIntD.begin() ;it!=vecIntD.end();it++)  
  58.     {  
  59.         cout<<*it<<"     ";  
  60.     }  
  61.     cout<<endl;  
  62.     return 0;  
  63. }  

2.增加及获得元素:

  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6. class A  
  7. {  
  8. public:  
  9.     int n;  
  10. public:  
  11.     A(int n)  
  12.     {  
  13.         this->n = n;  
  14.     }  
  15. };  
  16.   
  17. int main()  
  18. {  
  19.       
  20.     //int型vector,包含3个元素  
  21.     vector<A> vecClassA;  
  22.   
  23.     A a1(1);  
  24.     A a2(2);  
  25.     A a3(3);  
  26.   
  27.     //插入1 2 3  
  28.     vecClassA.push_back(a1);  
  29.     vecClassA.push_back(a2);  
  30.     vecClassA.push_back(a3);  
  31.       
  32.       
  33.     int nSize = vecClassA.size();  
  34.   
  35.     cout<<"vecClassA:"<<endl;  
  36.   
  37.     //打印vecClassA,方法一:  
  38.     for(int i=0;i<nSize;i++)  
  39.     {  
  40.         cout<<vecClassA[i].n<<"     ";  
  41.     }  
  42.     cout<<endl;  
  43.   
  44.     //打印vecClassA,方法二:    
  45.     for(int i=0;i<nSize;i++)  
  46.     {  
  47.         cout<<vecClassA.at(i).n<<"     ";  
  48.     }  
  49.     cout<<endl;  
  50.   
  51.     //打印vecClassA,方法三:  
  52.     for(vector<A>::iterator it = vecClassA.begin();it!=vecClassA.end();it++)  
  53.     {  
  54.         cout<<(*it).n<<"     ";  
  55.     }  
  56.     cout<<endl;  
  57.       
  58.     return 0;  
  59. }  

3.修改元素


修改元素方法有三:1.数组修改 2.引用修改3.迭代器修改

  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6.   
  7. int main()  
  8. {  
  9.       
  10.     //int型vector,包含3个元素  
  11.     vector<int> vecIntA;  
  12.   
  13.     //插入1 2 3  
  14.     vecIntA.push_back(1);  
  15.     vecIntA.push_back(2);  
  16.     vecIntA.push_back(3);  
  17.       
  18.     int nSize = vecIntA.size();  
  19.   
  20.     //通过引用修改vector  
  21.     cout<<"通过数组修改,第二个元素为8:"<<endl;  
  22.     vecIntA[1]=8;  
  23.   
  24.     cout<<"vecIntA:"<<endl;  
  25.     //打印vectorA  
  26.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  27.     {  
  28.         cout<<*it<<"     ";  
  29.     }  
  30.     cout<<endl;  
  31.       
  32.     //通过引用修改vector  
  33.     cout<<"通过引用修改,第二个元素为18:"<<endl;  
  34.     int &m = vecIntA.at(1);  
  35.     m=18;  
  36.   
  37.     cout<<"vecIntA:"<<endl;  
  38.     //打印vectorA  
  39.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  40.     {  
  41.         cout<<*it<<"     ";  
  42.     }  
  43.     cout<<endl;  
  44.   
  45.     //通过迭代器修改vector  
  46.     cout<<"通过迭代器修改,第二个元素为28"<<endl;  
  47.     vector<int>::iterator itr = vecIntA.begin()+1;  
  48.     *itr = 28;  
  49.   
  50.     cout<<"vecIntA:"<<endl;  
  51.     //打印vectorA  
  52.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  53.     {  
  54.         cout<<*it<<"     ";  
  55.     }  
  56.     cout<<endl;  
  57.   
  58.     return 0;  

运行结果:

4.删除


删除向量主要通过erase和pop_back 

  1. #include<iostream>  
  2. #include<vector>  
  3.   
  4. using namespace std;  
  5.   
  6.   
  7. int _tmain(int argc, _TCHAR* argv[])  
  8. {  
  9.       
  10.     //int型vector,包含3个元素  
  11.     vector<int> vecIntA;  
  12.   
  13.     //循环插入1 到10  
  14.     for(int i=1;i<=10;i++)  
  15.     {  
  16.         vecIntA.push_back(i);  
  17.     }  
  18.       
  19.     vecIntA.erase(vecIntA.begin()+4);  
  20.           
  21.     cout<<"删除第5个元素后的向量vecIntA:"<<endl;  
  22.     //打印vectorA  
  23.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  24.     {  
  25.         cout<<*it<<"\t";  
  26.     }  
  27.     cout<<endl;  
  28.   
  29.     //删除第2-5个元素  
  30.     vecIntA.erase(vecIntA.begin()+1,vecIntA.begin()+5);  
  31.   
  32.     cout<<"删除第2-5个元素后的vecIntA:"<<endl;  
  33.     //打印vectorA  
  34.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  35.     {  
  36.         cout<<*it<<"\t";  
  37.     }  
  38.     cout<<endl;  
  39.   
  40.     //删除最后一个元素  
  41.     vecIntA.pop_back();  
  42.   
  43.     cout<<"删除最后一个元素后的vecIntA:"<<endl;  
  44.     //打印vectorA  
  45.     for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  
  46.     {  
  47.         cout<<*it<<"\t";  
  48.     }  
  49.     cout<<endl;  
  50.   
  51.     return 0;  
  52. }  

运行结果:

 文章转载:

vector容器用法详解 - 蒲公英110 - 博客园 (cnblogs.com)

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

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

相关文章

redisson的使用及LUA脚本实现分布式秒杀

1.redisson实现分布式锁(推荐) redisson官网&#xff1a;Redisson: Easy Redis Java client and Real-Time Data Platform Redisson是一个基于Redis的Java客户端&#xff0c;它不仅提供了对Redis基本操作的支持&#xff0c;而且是一个功能丰富的分布式协调服务客户端。Rediss…

知识分享:隔多久查询一次网贷大数据信用报告比较好?

随着互联网金融的快速发展&#xff0c;越来越多的人开始接触和使用网络贷款。而在这个过程中&#xff0c;网贷大数据信用报告成为了评估借款人信用状况的重要依据。那么&#xff0c;隔多久查询一次网贷大数据信用报告比较好呢?接下来随小易大数据平台小编去看看吧。 首先&…

Pandas 多层索引中的索引和切片操作你学会了吗

1. Series的索引操作 对于Series来说&#xff0c;直接中括号[]与使用 .loc() 完全一样 显式索引 # 导包import numpy as npimport pandas as pd data np.random.randint(0,100,size6) index [ ["1班","1班","1班","2班","…

C++——list的实现以及源码

前言&#xff1a; 最近学习了clist的实现&#xff0c;这让我对迭代器的理解又上升了一个新的高度&#xff0c;注意&#xff1a;代码里的list是放在一个叫zgw的命名空间里边&#xff0c;但是在实现list的代码中没有加namespace&#xff0c;这里给个注意&#xff0c;以后复习时能…

颜色值进制转换

颜色值进制转换 专业的和非专业程序员在编程时都碰到过颜色值的表达式。特别是在编制网页和设计界面时&#xff0c;都要选择颜色。各语言的颜色值表达式就两种&#xff0c;十六进制的颜色值hex$和十进制的RGB格式。现成的调色板颜色表也是这两种格式。写代码时会遇到写颜色值码…

Linux-组管理和权限管理

1 Liunx组的基本介绍&#xff1a; 在Linux中的每个用户必须属于一个组&#xff0c;不能独立于组外。在Linux中每个文件都有所有者、所在组、其他组的概念 所有者所在组其它组改变用户所在的组 2 文件/目录的所有者 一般文件的创建者&#xff0c;谁创建了该文件&#xff0c;就…

垃圾回收机制及算法

文章目录 概要对象存活判断引用计数算法可达性分析算法对象是否存活各种引用 垃圾收集算法分代收集理论复制算法标记清除算法标记-整理算法 概要 垃圾收集&#xff08;Garbage Collection&#xff0c; 下文简称GC&#xff09;&#xff0c;其优缺点如下&#xff1a; 优点&#…

Shell

Linux中shell是Linux内核的一个外层保护工具&#xff0c;负责用户与内核互交。是一直命令行解析器&#xff0c;是指一直应用程序&#xff0c;且提供一个界面 还是一种编程语言. 查看当前系统的Shell 查看有哪些shell&#xff0c;用cat /etc/shells 查看当前系统默认的shell&…

二十八篇:嵌入式系统实战指南:案例研究与未来挑战

嵌入式系统实战指南&#xff1a;案例研究与未来挑战 1. 引言 1.1 嵌入式系统的重要性及其应用广度 在当今快速发展的技术领域中&#xff0c;嵌入式系统扮演着至关重要的角色。这些系统是专门设计的计算机硬件和软件的组合&#xff0c;旨在执行特定任务&#xff0c;如控制、监…

牛马真的沉默了,入职第一天就干活

入职第一天就干活的&#xff0c;就问还有谁&#xff0c;搬来一台N手电脑&#xff0c;第一分钟开机&#xff0c;第二分钟派活&#xff0c;第三分钟干活&#xff0c;巴适。。。。。。 打开代码发现问题不断 读取配置文件居然读取两个配置文件&#xff0c;一个读一点&#xff0c;…

Leetcode算法题笔记(3)

目录 矩阵101. 生命游戏解法一解法二 栈102. 移掉 K 位数字解法一 103. 去除重复字母解法一 矩阵 101. 生命游戏 根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子…

计算机网络——TCP 协议的三次握手 / 四次挥手

简述 TCP / UDP 协议都是传输层的协议。 UDP 是面向无连接的协议&#xff0c;就是说发送端不在乎消息数据是否传输到接收端了&#xff0c;所以会出现数据丢失的情况&#xff0c;所以可靠性也不高。 TCP 是面向连接的、可靠的、基于字节流的传输层协议。所谓面向连接的&#…

机器学习算法手撕(一):KD树

import math import matplotlib.pyplot as pltclass Node:def __init__(self, data, leftNone, rightNone):self.data dataself.left leftself.right right# 创建KDTree类 class KDTree:def __init__(self, k):self.k kdef create_tree(self,dataset,depth):if not dataset…

SpringBoot使用rsa-encrypt-body-spring-boot实现接口加解密

废话不多说&#xff0c;直接上代码 引入依赖 <dependency><groupId>cn.shuibo</groupId><artifactId>rsa-encrypt-body-spring-boot</artifactId><version>1.0.1.RELEASE</version> </dependency>配置文件 rsa:encrypt:# 是…

电表远传抄表是什么?

1.电表远传抄表&#xff1a;简述 电表远传抄表&#xff0c;又称为远程控制自动抄表系统&#xff0c;是电力行业的智能化技术运用&#xff0c;它通过无线或通信网络技术&#xff0c;完成对电表数据信息的远程收集解决。此项技术不仅提升了抄水表高效率&#xff0c;降低了人工偏…

Java订餐系统源码 springboot点菜系统源码

Java订餐系统源码 springboot点菜系统源码 源码下载地址&#xff1a;https://download.csdn.net/download/xiaohua1992/89341358 功能介绍&#xff1a; 前台登录&#xff1a;前台登录&#xff1a; ①首页&#xff1a;菜品信息推荐、菜品信息展示、查看更多 ②菜品信息&…

【剑指offer】2.2编程语言(p22-p25)——面试题1:string赋值运算函数

本节博客是对阅读剑指offer后的笔记归纳总结&#xff0c;有需要借鉴即可。 目录 1.p21-p25内容概要2.询问语法概念常考&#xff1a;CPP关键字理解举例&#xff1a;sizeof空类 3.分析代码举例&#xff1a;类中拷贝构造的无限递归问题 4.写代码常考点&#xff1a;类内成员函数、迭…

keycloakAsana SSO对接配置

说明&#xff1a;Keycloak与Asana单点登录对接&#xff0c;Keycloak做IDP&#xff0c;Asana做SP&#xff1b; 一、环境信息 操作系统&#xff1a;ubuntu keycloak&#xff1a;21.1.2 Asana enterprise&#xff1b;更新apt软件包索引&#xff1a; sudo apt update检查是否已安…

数组-最接近给出数字的三数之和

题目描述 解题思路 这里使用三层for循环&#xff0c;暴力解法穷举所有三个数和的可能性&#xff0c;注意三层循环里的索引不要重复。 代码实现 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返…

Introduction of Internet 计算机网络概述

计算机网络的概念 计算机网络的定义&#xff1a; 多台独立的计算机通过通信线路实现资源共享的计算机系统 计算机网络的组成 资源子网&#xff1a;提供共享的软件资源和硬件资源 通信子网&#xff1a;提供信息交换的网络结点和通信线路 计算机网络类型 按照拓扑排序 星型…