首页 > 其他分享 >第17章 STL动态数组类

第17章 STL动态数组类

时间:2024-05-25 11:07:25浏览次数:15  
标签:删除 17 STL 元素 插入 vector 数组 动态

1 std::vector的特点

vector是一个模板类,提供了动态数组的通用功能:

  • 在数组尾部插入元素时间是固定的
  • 在数组中间添加或删除元素所需时间与改元素后面的元素个数成正比
  • 存储的元素数是动态的,vector类负责管理内存

vector是一种动态数组,结构体如下:
image

2 vector操作

2.1 实例化vector

2.2 插入元素

2.2.1 在末尾插入元素

push_back是vector类的一个公有成员函数,用于在动态数组末尾插入对象

2.2.2 在指定位置插入元素

要想在指定位置插入元素可使用insert()函数,其有多个重载版本

2.3 访问数组元素

有三种方法访问vector元素:

  • 使用下标运算符[]以数组语法方式访问
  • 使用成员函数at()
  • 使用迭代器

2.3.1 使用下标运算符

2.3.2 使用at()成员函数

访问vector中指定索引的元素,并返回改元素的引用
示例:

#include <iostream>
#include <vector>

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

  // 分配元素
  for (unsigned i=0; i<myvector.size(); i++)
    myvector.at(i)=i;

  std::cout << "myvector contains:";
  for (unsigned i=0; i<myvector.size(); i++)
    std::cout << ' ' << myvector.at(i);
  std::cout << '\n';

  return 0;
}

输出:

myvector contains: 0 1 2 3 4 5 6 7 8 9

2.3.2 使用迭代器

2.4 删除元素

pop_back()将从末尾删除元素,使用pop_back()删除元素的时间是固定的,不随vector存储元素个数变化

3 vector的大小和容量

vector的大小指实际存储的元素个数,可通过调用成员函数size()查询
vector的容量指在重新分配内存以存储更多元素前vector能够存储的元素数,可通用成员函数capacity()查询
如果vector需要频繁的给其内部动态数组分配内存,将对性能造成一定影响,可通过成员函数reserve解决

4 STL deque类

deque是一个STL动态数组类,与vector非常类似,但支持在数组开头和末尾插入或删除元素。其内部结构如图:
image
与vector不同的是,其除了可以在末尾插入删除元素外(操作与vector一样),还可以在开头插入删除元素

  • 插入元素:push_front()
  • 删除元素:pop_front()

标签:删除,17,STL,元素,插入,vector,数组,动态
From: https://www.cnblogs.com/xdhisgood-xy/p/18211683

相关文章

  • 数组类型的有界阻塞队列-ArrayBlockingQueue
    一:ArrayBlockingQueue简介  一个由循环数组支持的有界阻塞队列。它的本质是一个基于数组的BlockingQueue的实现。它的容纳大小是固定的。此队列按FIFO(先进先出)原则对元素进行排序。队列的头部是在队列中存在时间最长的元素。队列的尾部是在队列中存在时间最短的元素。......
  • 长度最小的子数组
    leetcode:209题需求:给定一个正整数的数组,和一个target,找出数组中子数组和大于等于target的最小连续子数组。示例1:输入:target=7,nums=[2,3,1,2,4,3]输出:2解释:子数组[4,3]是该条件下的长度最小的子数组。示例2:输入:target=4,nums=[1,4,4]输出:1示例3:......
  • 代码随想录算法训练营第一天 | 977.有序数组的平方;
    代码随想录算法训练营第一天|977.有序数组的平方;977题链接:https://leetcode.cn/problems/squares-of-a-sorted-array/代码随想录链接:https://programmercarl.com/0977.有序数组的平方.html#思路209题链接:https://leetcode.cn/problems/minimum-size-subarray-sum/submission......
  • 代码随想录算法训练营第第17天 | 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子
    三道题都没想出来,还是要加强递归的练习110.平衡二叉树(优先掌握递归)再一次涉及到,什么是高度,什么是深度,可以巩固一下。题目链接/文章讲解/视频讲解:https://programmercarl.com/0110.平衡二叉树.htmlfunctiongetHeight(node){if(node===null)return0;letleftH......
  • 初识C语言——数组详解
    C语言数组相关的详述,值得一看。文章目录一、数组的概念二、一维数组1.一维数组的创建和初始化1.1数组创建1.2数组的初始化2.数组的类型3.一维数组的使用3.1数组的打印3.2数组的输入4.⼀维数组在内存中的存储5.sizeof求数组元素个数三、二维数组1.二维数组的创建和......
  • P8655 [蓝桥杯 2017 国 B] 发现环
    原题链接题解有点像拓扑排序拓扑排序怎么做来着?首先找老祖节点对不对?老祖节点有什么特性?入度为零而在无向图中,我们把叶子节点看成老祖节点,它们有什么特性?连接的边只有一条code#include<bits/stdc++.h>usingnamespacestd;vector<int>G[100005];intcon[100005]={......
  • C语言中二维数组和数组名的二意性
    1.二维数组二维数组的本质,也是一维数组,一维数组中的每个元素,又是一个一维数组声明/定义:int[4]array[3]=>intarray[3][4];intmain(){inta[3][4];printf("&arr[0][0]=%p\n",&a[0][0]);//0x16f38b2e8printf("&arr[0]=%p\n",&a[0]);//0......
  • 类的数组,数组指针,指针数组
    在C++中,类的数组、类的数组指针和类的指针数组是三种不同的数据结构,它们各自有不同的用途和特性。下面我将分别给出它们的示例和说明。1.类的数组类的数组是类的多个对象的集合,这些对象在内存中连续存储。cpp复制代码classMyClass{public:intvalue;MyClass(intv)......
  • 第三讲 栈、队列和数组 (1)
    文章目录第三讲栈、队列和数组3.1栈3.1.1出栈元素的不同排列与卡特兰数3.1.2栈的顺序表实现3.1.3共享栈3.1.4栈的链表实现3.1.5栈的两种实现的优缺点3.1.6c++中的栈(s......
  • 小苯的好数组
    题目描述大白熊给了小苯一个长度为nnn的数组aaa,这次他希望小苯从数组中选择一个子序列(下方备注有定义解释),满足这个子序列构成的数组是一个“好数组”。大白熊定义好数组是:如果一个数组按升序排序后和原来不完全相同,则其是一个好数组。例如[3,2,2][3,2,2][3,2,2] 升序排......