C++中STL的容器vector

文章目录

  • 什么是vector
    • vector与普通顺序表不同的点
  • vector的成员函数
    • operator=
    • operator[]
    • begin与end与iterator
    • size()
    • capacity
    • resize
    • empty
    • reserve
    • push_back
    • pop_back
    • insert
    • erase
    • swap
    • clear
    • 成员变量
  • 总结

什么是vector

vector:是数据结构里面的顺序表,开辟一段连续的空间存储内容

vector与普通顺序表不同的点

1、因为是用c++写的,里面包含了模版,可以是自定义类型,不止内置类型
2、自身提供了交换函数
3、c++11中引入了auto 可以使用范围for遍历
····

vector的成员函数

operator=

赋值操作
在这里插入图片描述
因为只重载了一个版本
vector类型=vector类型
如果其是其他类型会隐式类型转化

operator[]

[]:下标查找

#include"vector.h"
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	//arr.resize(2);
	arr.reserve(100);
	cout << arr[1]<< endl;
	return 0;
}


begin与end与iterator

iterator:迭代器,vector中是用模版指针定义的
begin:指向第一个元素
end:指向最后一个元素
使用方式:

#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector;
  for (int i=1; i<=5; i++) myvector.push_back(i);

  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

size()

size():计算有效长度为多少
使用方式:

#include"vector.h"
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	cout << arr.size() << endl;
	return 0;
}


capacity

capacity:查当前顺序表中的容量

#include"vector.h"
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	cout << arr.capacity() << endl;
	return 0;
}


resize

resize:设置容量
如果resize<size()那么会缩容,并且吧数据删掉
如果resize在size()和capacity()之间那么也是缩容,不删数据
如果resize>capacity()那么就是扩容
在这里插入图片描述

empty

检查顺序表中有没有内容

#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector;
  int sum (0);

  for (int i=1;i<=10;i++) myvector.push_back(i);

  while (!myvector.empty())
  {
     sum += myvector.back();
     myvector.pop_back();
  }

  std::cout << "total: " << sum << '\n';

  return 0;
}

reserve

reserve:扩容
在这里插入图片描述

push_back

尾插

#include"vector.h"
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	//arr.resize(2);
	arr.reserve(100);
	cout << arr[1]<< endl;
	return 0;
}


pop_back

尾删

#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	//arr.resize(2);
	//arr.reserve(100);
	cout << arr.size()<< endl;
	return 0;
}


insert

指定位置插入
可以插入一个,也可以多个
因为他重载的是迭代器参数,避免了定死了类型
所以要传的是迭代器

#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.insert(arr.begin()+2, 30);
	//arr.resize(2);
	//arr.reserve(100);
	cout << arr.size()<< endl;
	return 0;
}


erase

删除指定位置的内容
重载的同样是迭代器
所以要传迭代器

#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.insert(arr.begin()+2, 30);
	arr.erase(arr.begin() + 2);
	//arr.resize(2);
	//arr.reserve(100);
	cout << arr.size()<< endl;
	return 0;
}


swap

交换,跟vector类型的对象 交换所有东西

#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	vector<int> s;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.insert(arr.begin()+2, 30);
	arr.erase(arr.begin() + 2);
	//arr.resize(2);
	//arr.reserve(100);
	s.swap(arr);
	cout << arr.size()<< endl;
	cout << s.size() << endl;
	return 0;
}

clear

清除字符串内容

#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	vector<int> s;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.pop_back();
	arr.insert(arr.begin()+2, 30);
	arr.erase(arr.begin() + 2);
	//arr.resize(2);
	//arr.reserve(100);
	s.swap(arr);
	cout << arr.size()<< endl;
	cout << s.size() << endl;
	s.clear();
	cout << s.size() << endl;
	return 0;
}

成员变量

都是迭代器,我这个是自己写的
并不是官方的名字

	iterator _str;//首个元素的地址
	iterator _size;//尾元素的地址
	iterator _capacity;//容量

总结

跟普通的顺序表还是有区别的,总体变的好用了很多。
dp最大的噩梦

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM类加载器ClassLoader的源码分析

1、ClassLoader与现有类加载器的关系 ClassLoader与现有类加载器的关系&#xff1a; ClassLoader是一个抽象类。如果我们给定了一个类的二进制名称&#xff0c;类加载器应尝试去定位或生成构成定义类的数据。一种典型的策略是将给定的二进制名称转换为文件名&#xff0c;然后去…

LeetCode Hot100 39.组合总数

题目&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限…

[报错]记录IDEA远程开发报错:java: Cannot run program.....

报错内容 IDEA在进行远程开发的时候报错&#xff0c;内容如下&#xff1a; java: Cannot run program "/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java" (in directory "/home/jim/.cache/JetBrains/RemoteDev-IU/_home_jim_DevCodes_Github_zfile/compile-…

空中消防员:无人机森林防火应用全面升级

森林是生态系统的重要组成部分&#xff0c;也是人类得以生存的关键。我国森林面积广大&#xff0c;存在火灾频发的困境。提升森林火灾防控能力是维护生态平衡、保护资源和保障人民生命安全的必要步骤。随着无人机技术的发展&#xff0c;其在无人机森林防火中的应用为传统巡查工…

【EI会议征稿中】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)

第三届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2024&#xff09; 2024 3rd International Conference on Cyber Security, Artificial Intelligence and Digital Economy 第二届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2023&…

SpringBoot中的YAML配置文件和日志

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 YAML配置文件1 基本语法2 语法细节 日志1 简介2 格式3 级别4 日志保存 &#x1f48e;总结 YAML配置文件 SpringBoot集中化管理配置&#xff1a;application.properties 问题&#xff1a;配置多了以后难阅读和修i该&…

链表OJ—相交链表

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 1、相交链表的题目&#xff1a; 方法讲解&#xff1a; 图文解析&#xff1a; 代码实现&#xff1a; 总结 前言 世上有两种耀眼的光芒&#xff0c;一种是正在升…

电脑中环境变量的设置方法

环境变量是在操作系统中一个具有特定名字的对象&#xff0c;它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量&#xff0c;当要求系统运行一个程序而没有告诉它程序所在的完整路径时&#xff0c;系统除了在当前目录下面寻找此程序外&a…

根据应聘者的姓名和所学专业判断是否需要这样的程序设计人员

一、程序分析 导入Scanner函数&#xff0c;分别输入应聘者的姓名和应聘者所学的程序设计语言。 二、具体代码 import java.util.Scanner; public class Recruitment {public static void main(String[] args){try (Scanner scan new Scanner(System.in)) {System.out.prin…

上位机与PLC:ModbusTCP通讯之数据类型转换

前请提要: 从PLC读取的数值,不管是读正负整数还是正负浮点数,读取过来后都会变成UInt16,也就是Ushort类型 一、ushort(UInt16)转成 Int32 源代码方法: //ushort类型转Int32类型的方法private int ushortToInt32(ushort[] date, int start){//先进行判断,长度是否正确…

矩阵处理—Zigzag矩阵打印

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 Zigzag矩阵打印1.1 题目描述1.2 解决思路1.3 代码实现 &#x1f48e;总结 Zigzag矩阵打印 1.1 题目描述 有一个n行m列的矩阵&#xff0c;要求按照Z字形打印出数据&#xff0c;如图&#xff1a; 1.2 解决思路 用一…

【JUC】二十三、LongAdder:多线程计数的更优解

文章目录 1、常用API2、热点商品点赞计算器3、LongAdder高性能的原理4、源码&#xff1a;LongAdder-add方法5、源码&#xff1a;LongAdder-longAccumulate方法6、源码&#xff1a;LongAdder-sum方法7、AtomicLong和LongAdder的对比 Since 1.8&#xff0c;新加原子操作增强类&am…

AI+HR黑科技秘笈:AI赋能人力资本智能化变革

今天分享的是AI系列深度研究报告&#xff1a;《AIHR黑科技秘笈&#xff1a;AI赋能人力资本智能化变革》。 &#xff08;报告出品方&#xff1a;Ifchange&#xff09; 报告共计&#xff1a;98页 让AI技术提升人岗匹配效果&#xff0c;我们做了这些探索 AI 技术实现人岗匹配&a…

DTCC2023大会-DBdoctor-基于eBPF观测数据库-附所有PPT下载链接

DTCC2023大会-DBdoctor-基于eBPF观测数据库-附所有PPT下载链接 8月16日—18日,第14届中国数据库技术大会(DTCC-2023)在北京国际会议中心举行。聚好看在大会上首次发布基于eBPF观测数据库性能的产品DBdoctor&#xff0c;受到了业界广泛的关注。近期几位业内同仁过来要大会的PPT…

滑动窗口练习(三)— 加油站问题

题目 测试链接 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定两个整数数组…

六:Day03_Mybatis-Plus

一、介绍 MyBatis-Plus&#xff08;简称 MP&#xff0c;是由baomidou(苞米豆)组织开源的&#xff09;是一个基于 MyBatis 的增强工具&#xff0c;它对 Mybatis 的基础功能进行了增强&#xff0c;但未做任何改变&#xff0c;Mybatis-Plus 其实可以看作是对 Mybatis 的再一次封装…

Linux上使用独立显卡Tesla T4(测试视频压缩)

背景 将视频处理程序单独部署至K8S之外&#xff0c;使用独立GPU显卡的一台服务器上。 需事先对GPU性能做简单测试。 已通过zabbix对Linux进行了系统资源监控。 已通过PrometheusGrafana对显卡Tesla T4做了性能监控。 逐步补充&#xff0c;稍等 2023年12月6日 操作 查看当前…

案例005:基于小程序的电子点菜系统开发设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

【LSM tree 】Log-structured merge-tree 一种分层、有序、面向磁盘的数据结构

文章目录 前言基本原理读写流程写流程读流程 写放大、读放大和空间放大优化 前言 LSM Tree 全称是Log-structured merge-tree, 是一种分层&#xff0c;有序&#xff0c;面向磁盘的数据结构。其核心原理是磁盘批量顺序写比随机写性能高很多&#xff0c;可以通过围绕这一原理进行…

C语言--实现一个函数把一个整数转为它对应的十六进制的字符串

一.题目描述 实现一个函数把一个整数转为它对应的十六进制的字符串。 比如&#xff1a;输入数字1234 输出&#xff1a;4D2 二.思路分析 用一个sprintf函数可以解决问题&#xff0c;输出相对应的字符串 要注意的问题就是&#xff1a;函数结束后要继续使用的内存&#xff08;比如…