首页 > 其他分享 >STL之动态数组

STL之动态数组

时间:2024-11-17 12:15:25浏览次数:3  
标签:迭代 STL 元素 t2 t1 vector 数组 动态

一、标准模板库(Standard Template Library,STL)是HP公司开发的一个C++模板库,包含一些常用的数据结构和算法。

具有以下的组件:

1.容器:容纳包含一组元素的对象。

2.迭代器:提供访问容器的方法

3.函数对象

4.算法

二、STL之向量——vector

    vector是c++标准库提供的一个变长数组类型,它可以像数组一样进行数据的存储和访问。

    2.vector会根据需要自动扩展其自身的容量来容纳更多的数据。

    3.vector的内部存储结构和数组一样,使用的是一段连续的存储空间。

    4.头文件#include<vector>

三、vector的优缺点

优点:

(1)进行插入删除操作后会动态连接

(2)有很多函数可以调用

(3)动态分配内存,节省空间

缺点:

(1)需要记忆函数较多

(2)Vector变量动态改变时,各参数值可能需要重新获取

(3)Vector数组的数组名不是数组的地址,部分函数需要使用迭代器访问容器。

四、vector的声明和初始化

(1)vector<数据类型>a,b,c,d;//空的

(2)vector<数据类型>a(10);//定义一个长度为10,下标从0~9的动态数组,数组会默认初始化为0

(3)vector<数据类型>a(10,1);//定义一个长度为10,下表从0~9的动态数组,数组初始化为1

(4)vector<数据类型>a(b);用动态数组b来创建动态数组a,整体复制性赋值

(5)vector<数据类型>().swap(a);  清空a,并释放空间;  //惯用法。

五、vector的常用函数

(1)a.size()返回数组长度

(2)a.resize(n)重设数组的大小。

(3)a.clear()清空数组所有元素

(4)a.empty()判断数组是否为空,是返回1,否返回0

(5)a.swap(b)交换a和b两容器的值

(6)a.push_back(x)在动态数组a尾部添加元素x

(7)a.pop_back()删除数组尾部元素

六、 vector 的访问

访问 vector 中的元素一般有两种方式。

1. 第一种是通过“下标”访问。

例如,对于容器 vector<int> v,可以使用 v[index]来访问它的第 index 个元素。其中,0≤index≤v.size()-1,v.size()表示 vector 中元素的个数。

2.第二种方式是通过“迭代器”访问。

迭代器类似于指针,指向vector中元素的位置,可以使用迭代器来访问vector中的元素。

迭代器的声明和初始化

(1)vector<数据类型>::iterator t1,t2;// 创建t1,t2两个迭代器

t1=a.begin();     t1指向数组a的开始位置

t2=a.end()-1;     t2指向数组a结束位置

w

a.begin()指向数组a的开始位置

a.end()指向数组a的结束位置的下一个位置

例如:

vector<int>::iterator it= a.begin();

for(int i = 0; i <= 5; i++) printf("%d ",*(it + i));

七、配合迭代器使用的函数

(1)a.insert(t1,2)//在数组下标为t1的位置插入一个元素2,其他元素向后移一位

(2)a.erase(t1)//删除第t1个位置的元素,其他元素向前移动一位

(3)a.erase(t1,t2+1)//删除t1~t2区间内的元素,其余元素向前移动

(4)reverse(t1,t2+1)//反转t1~t2区间内的元素

(5)sort(t1,t2+1)//对数组元素从小到大排序

标签:迭代,STL,元素,t2,t1,vector,数组,动态
From: https://blog.csdn.net/2403_87858277/article/details/143830484

相关文章

  • cmake系列-怎么在构建C++库文件时动态的选择构建动态库还是静态库
    在之前我们介绍的内容里,关于构建动态库还是静态库都是在CMakeLists.txt里指定的,那如果一个解决方案原来是构建动态库,然后因为某些原因又希望构建静态库了,那岂不是还要修改CMakeLists.txt,对于平时用的构建系统来说好像还真的是需要修改,哈哈,但是cmake确实有方案能够在不用修改......
  • 【C++笔记】一维数组元素处理
    目录1.插入元素方法代码2.删除元素方法代码3.交换元素方法代码1.插入元素方法概念:插入元素是指在数组的某个位置添加一个新元素,并将原来的元素向后移动。例如,将5插入到数组[1,2,4,6]的第二个位置,结果变为[1,5,2,4,6]。关键点:确定插入位置:首先要明......
  • 如何让Excel公式中的参数实现动态引用
        如果你想成为Excel函数高手,仅仅掌握VLOOKUP和Countif等函数是远远不够的,起码你得学会使用INDIRECT函数,熟练掌握INDIRECT函数能让你从一个初学者晋级为高手,学会它就好比孙悟空掌握了72般变化的基本功,你说厉不厉害。    INDIRECT函数用于将文本字符串转换为......
  • 实验二 数码管的静态和动态显示方法、矩阵式键盘扫描
    本文主要介绍了课本第5章第3、7节数码管与矩阵式键盘接口设计的实验,本节内容更侧重对原理的理解,可能会出简答题LED数码管的显示原理静态显示当LED位于静态显示时,无论多少位LED数码管都处于同时显示的状态,但1位数码管独占1个IO口实验一#include<reg51.h>#defineucharu......
  • 动态规划-背包问题——[模版]完全背包问题
    1.题目解析题目来源[模版]完全背包_牛客题霸_牛客测试用例 2.算法原理1.状态表示与01背包相同,这里的完全背包也是需要一个二维dp表来表示最大价值,具体如下求最大价值dp[i][j]:在[1,i]区间选择物品,此时总体积不大于j时的最大价值求装满时的价值dp[i][j]:在[......
  • node.js毕设新能源汽车动态单价推荐(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景关于新能源汽车动态单价推荐的研究,现有研究主要集中在新能源汽车的成本分析、市场定价策略以及消费者行为等方面,专门针对动态单价推荐系统的研究较少。在国......
  • 一文搞懂!数组作为函数输入如何声明?
    一维数组函数形参定义:voidarray_print(inta[])一维数组指针函数形参定义:voidarray_print(int*a)二维数组函数形参定义://必须指明数组的列数,数组的行数没有太大关系//因为函数调用时传递的是一个指针,它指向由行向量构成的一维数组//所以以下两种声明方式都可以......
  • 【SSLOJ 3347】动态逆序对
    题目大意给出一个长度为\(n\)的排列\(a\)。每次交换两个数,求逆序对数对\(2\)取模的结果。输入格式第一行一个正整数\(n\)。第二行\(n\)个数,表示给出的排列\(a\)。第三行一个正整数\(q\)。接下来\(q\)行,每行两个正整数,表示交换\(a_i\)和\(a_j\)。输出格式输出......
  • (nice!!!)(LeetCode) 3240. 最少翻转次数使二进制矩阵回文 II (分类讨论、数组)
    题目:3240.最少翻转次数使二进制矩阵回文II思路:分类讨论,需要对行和列的个数进行讨论,时间复杂度为0(nm),细节看注释。C++版本:classSolution{public:intminFlips(vector<vector<int>>&grid){intans=0;intn=grid.size(),m=grid[0].size();......
  • 除自身以外数组的乘积
    力扣链接:.-力扣(LeetCode)给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32位 整数范围内。请 不要使用除法,且在 O(n) ......