C++中STL的容器vector

news2024/11/19 15:21:53

文章目录

  • 什么是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最大的噩梦

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

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

相关文章

【MATLAB】基于EMD分解的信号去噪算法(基础版)

代码操作 【MATLAB】基于EMD分解的信号去噪算法&#xff08;基础版&#xff09; 代码的主要内容 基于EMD&#xff08;经验模态分解&#xff09;的信号去噪算法通常可以结合相关系数、信号的熵值或者方差贡献率来完成去噪处理。这些指标可以用于确定阈值&#xff0c;从而对信号…

WPF仿网易云搭建笔记(2):组件化开发

文章目录 前言专栏和Gitee仓库依赖属性实战&#xff1a;缩小&#xff0c;全屏&#xff0c;关闭按钮依赖属性操作封装主窗口传递this本身给TitleView标题控件主要代码MainWindow.xmalMainWindow.cs依赖属性方法封装TitleView.csTitleViewModelTitleViewModel实现效果 前言 这次…

FreeRTOS的内存管理方法(超详细)

内存管理 我们知道每次创建任务、队列、互斥锁、软件定时器、信号量或事件组时&#xff0c;RTOS 内核都需要 RAM &#xff0c; RAM 可以从 RTOS API 对象创建函数内的 RTOS 堆自动动态分配&#xff0c; 或者由应用程序编写者提供。 如果 RTOS 对象是动态创建的&#xff0c;那么…

Mac虚拟机CrossOver23破解版下载和许可证下载

CrossOver Mac Mac 和 Windows 系统之间的兼容工具。使 Mac 操作系统的用户可以运行 Windows 系统的应用&#xff0c;从办公软件、实用工具、游戏到设计软件&#xff0c; 您都可以在 Mac 程序和 Windows 程序之间随意切换。 系统要求 运行macOS的基于Intel或Apple Silicon 的…

99、NeRF ray space

CG相机模型 在图形学中最常用的相机模型的原理和小孔成像是类似的。 不同之处在于&#xff0c;如上图&#xff0c;小孔成像得到的图像是倒立的&#xff0c;但是我们希望得到的图像是正向的&#xff0c;因此&#xff0c;我们选择小孔前成像。 从 3D 到 2D 的投影&#xff0c;…

笔迹鉴定系统

用于笔迹鉴定书的生成。对于检材进行的特征采集&#xff0c;将采集到的特征自动排版&#xff0c;生成比对表&#xff0c;然后在比对表上进行标注。主要标注有&#xff1a;写法、笔顺、箭头、实线、虚线、左括号、右括号、上括号、下括号、运笔、注释、来源、折线、测量、矩形、…

iptables——建立linux安全体系

目录 一. 安全技术类型 二. linux防火墙 1. 按保护范围划分&#xff1a; 2. 按实现方式划分&#xff1a; 3. 按网络协议划分&#xff1a; 4. 防火墙原理 三. 防火墙工具——iptables 1. netfilter 中五个勾子函数和报文流向 数据包传输过程&#xff1a; ① .五表四链…

【2023传智杯-新增场次】第六届传智杯程序设计挑战赛AB组-DEF题复盘解题分析详解【JavaPythonC++解题笔记】

本文仅为【2023传智杯-第二场】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言二.赛题题目D题题目-E题题目-F题题目-二.赛题题解D题题解-…

个人博客网站如何实现https重定向(301)到http

对于个人网站站注册比较少的&#xff0c;服务器配置不是很好的&#xff0c;没必要https,https跳转到http是要时间的&#xff0c;会影响网站打开的速度。免费的https每年都要更换。个人博客网站https有一段时间了&#xff0c;而且很多页面都有收录排名&#xff0c;现在已去掉htt…

redis中使用事务保护数据完整性

事务是指一个执行过程&#xff0c;要么全部执行成功&#xff0c;要么失败什么都不改变。不会存在一部分成功一部分失败的情况&#xff0c;也就是事务的ACID四大特性&#xff08;原子性、一致性、隔离性、持久性&#xff09;。但是redis中的事务并不是严格意义上的事务&#xff…

Eclipse 4.30 正式发布 来看看有哪些值得期待的新特性

Eclipse 4.30 已正式发布&#xff0c;主要特性如下&#xff1a; 1、支持新的 Java 语言特性&#xff1a;包括 JEP 440: Record Patterns 和 JEP 441: Pattern Matching for Switch 2、针对 Java 编辑器的快速修复功能&#xff1a;包括添加默认 case、移除默认 case 和插入 br…

VGG模型

概念&#xff1a; CNN感受野 在卷积神经网络中&#xff0c;决定某一层输出结果中的一个元素所对应的输入层的区域大小&#xff0c;被称作感受野&#xff08;receptive field&#xff09;。通俗的解释是&#xff0c;输出feature map上的一个单元对应输入层上的区域大小。 VGG…

IntelliJ IDEA创建一个Maven项目

在IDEA中创建Maven项目&#xff0c;前提是已经安装配置好Maven环境 。 本文主要使用的是IntelliJ IDEA 2022.2.1 (Community Edition) 1.创建一个新project:File>Project 2.修改Maven配置&#xff1a;File>Settings>搜索maven 创建好的工程如下&#xff1a; src/main…

[ 蓝桥杯Web真题 ]-组课神器

目录 介绍 准备 目标 规定 思路 参考解法 介绍 在很多教育网站的平台上&#xff0c;课程的章节目录会使用树型组件呈现&#xff0c;为了方便调整菜单&#xff0c;前端工程师会为其赋予拖拽功能。本题需要在已提供的基础项目中&#xff0c;完成可拖拽树型组件的功能。 准…

【数据结构】——排序篇(上)

前言&#xff1a;前面我们已经学过了许许多多的排序方法&#xff0c;如冒泡排序&#xff0c;选择排序&#xff0c;堆排序等等&#xff0c;那么我们就来将排序的方法总结一下。 我们的排序方法包括以下几种&#xff0c;而快速排序和归并排序我们后面进行详细的讲解。 直接插入…

【SpringBoot】解析Springboot事件机制,事件发布和监听

解析Springboot事件机制&#xff0c;事件发布和监听 一、Spring的事件是什么二、使用步骤2.1 依赖处理2.2 定义事件实体类2.3 定义事件监听类2.4 事件发布 三、异步调用3.1 启用异步调用3.2 监听器方法上添加 Async 注解 一、Spring的事件是什么 Spring的事件监听&#xff08;…

Android 从assets读取文件装载成Bitmap,Kotlin

Android 从assets读取文件装载成Bitmap&#xff0c;Kotlin /*** fileName assets里面图片文件名*/fun readBitmapFromAssets(ctx: Context, fileName: String): Bitmap? {val assetManager: AssetManager ctx.assetsvar bitmap: Bitmap? nulltry {val inputStream assetMa…

自行编写一个简单的shell!

本文旨在编写一个简单的shell外壳程序&#xff01;功能类似于shell的一些基本操作&#xff01;虽然不能全部实现shell的一些功能&#xff01;但是通过此文章&#xff0c;自己写一个简单的shell程序也是不成问题&#xff01;并且通过此文章&#xff0c;可以让读者对linux中一些环…

实现一个简单的外卖系统

在这个技术飞速发展的时代&#xff0c;外卖系统已经成为人们生活中的一部分。通过一些简单的技术代码&#xff0c;我们可以搭建一个基本的外卖系统&#xff0c;让用户方便地选择、下单和支付。本文将使用Python和Flask框架为基础&#xff0c;演示一个简单的外卖系统的实现。 …

基于ssm海鲜自助餐厅系统论文

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此海鲜餐厅信息的…