STL之vector

简介: STL之vector

vector相当于一个动态数组,可以对其进行插入、增加等操作,使用vector容器,可以避免再去使用C类型的动态数组。

其初等层次的学习可以围绕在其相关的函数展开。


1.初始化


其初始化有多种方式,见下代码和注释:


#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef  int Type; 
int main()
{   vector<Type>a;//默认初始化Type类型名为a的动态数组 ,为空。 
  vector<Type>b(10,5);// 初始化Type类型名为b大小为10,初始值为5的动态数组 
  vector<Type>c=b;
  vector<Type>d(c);//创建拷贝
  vector<Type>e={1,2,3,4};//列表初始化,!!!但实际上我的Dev-C++编译不通过,不知道原因。 
  return 0;


2.增减插删


实际中,常常是创建一个vector对象后再对其进行增减插删等操作,主要依靠以下几个函数。

1.push_back(elem)

将数据添加到尾部。对于一个空的vector,不能使用下标向其中添加元素。只能使用push_back,只能对确知已存在的元素执行下标操作

2.pop_back()

将vector中尾部数据删除。

3.insert(a,elem)

在a位置前插入数据。

4.erase(a)

删除a位置上的元素,若是erase(a,b),则删除位置处于[a,b)上的元素。

5.clear()

全清。


3.访问


1.下标访问

注意只能对确知已存在的元素执行下标操作。

2.迭代器访问

可以类比于指针,设s为vector对象,s.begin()表示首地址,s.end()表示末地址,迭代器定义为vector::iterator p;

下为结合增删访问的例子:

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main()
{   
  vector<string>s;
  s.push_back("hello");
  s.push_back("  ");
  s.push_back("world");
  s.push_back("a");
  for(int i=0;i<4;i++)//下标访问 
  cout<<s[i];
  cout<<endl; 
  s.insert(s.begin()+3,"!");
  s.pop_back();
  vector<string>::iterator it;
  for(it=s.begin();it!=s.end();it++)//迭代器访问 
  cout<<*it;
  return 0;
}


结果:

1685009292210.jpg


4.延伸


1.二维数组的定义

vector<int*>a或vector<vector > a; //定义一个二维数组
a[0].size(); //指第一行的列数

至于输入就应该一行行即一个一维数组输入。

2.与sort,reverse这些算法可以结合

sort前面已经提及,reverse(a,b)是指将[a,b)上的元素翻转。

相关文章
|
关系型数据库 Java MySQL
Linux安装JDK1.8 & tomcat & MariaDB(MySQL删减版)
本教程提供了在Linux环境下安装JDK1.8、Tomcat和MariaDB的详细步骤。这三个组件的组合为Java Web开发和部署提供了一个强大的基础。通过遵循这些简单的指导步骤,您可以轻松建立起一个稳定、高效的开发和部署环境。希望这个指导对您的开发工作有所帮助。
410 8
|
JSON JavaScript 前端开发
如何通过 JavaScript 运行用 Go 编写的 WebAssembly 模块? 下
如何通过 JavaScript 运行用 Go 编写的 WebAssembly 模块?
345 0
|
Prometheus Cloud Native Unix
prometheus|云原生|kubernetes内部安装prometheus
prometheus|云原生|kubernetes内部安装prometheus
329 0
|
存储 缓存
[simulink] --- simulink模块(一)
[simulink] --- simulink模块
8328 0
|
算法 搜索推荐 Java
希尔排序(Java)
希尔排序(Java)
|
设计模式
带你读《2022技术人的百宝黑皮书》——如何快速理解复杂业务,系统思考问题?(5)
带你读《2022技术人的百宝黑皮书》——如何快速理解复杂业务,系统思考问题?(5)
224 0
|
自然语言处理 前端开发 JavaScript
深入理解JavaScript-作用域
本文介绍 JavaScript 中的作用域。从作用域是什么聊起,介绍 JavaScript 的词法作用域,再从词法作用域聊到动态作用域,将二者进行对比。讲完了作用域的分类,我们用一个例子解释作用域的作用。然后讲作用域的分类以及如何因为特性写函数
194 0
深入理解JavaScript-作用域
|
JavaScript 物联网 芯片
物联网设备天线设计与选型指南
物联网设备天线设计与选型指南
物联网设备天线设计与选型指南
|
人工智能
【1101】Quick Sort (25 分)
2.思路 利用继承关系求出每个元素A[i]的左边的最大值和右边的最小值(注意:要使得A[i]的左边的左右元素都比A[i]要小,所以要找A[i]左边的最大值进行比较)。
124 0