vector向量容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: stl -- vector向量

vector向量容器

vector向量容器不但能够像数组一样对元素进行随机访问,还能再尾部插入元素是一种简单、高效的容器。

包含头文件

#include<vector>

使用

STL泛型都定义再std命名空间中

迭代器相关

  • 创建iterator迭代器
vector<int>::iterator it;
  • 获得迭代器当前位置上的值
*it;

两个重要方法

  • begin()
    返回首元素位置的迭代器
  • end()
    返回最后一个元素的下一个元素位置的迭代器
#include<iostream>
#include<vector>
using namespace std;
int main(){
  vector<int> v(10);
  for(int i=0;i<10;i++){
    v[i]=i;
  }
  vector<int>::iterator it;
    //获取第0个元素的值
  it=v.begin();
  cout<<*it<<endl;
  it=v.end()-1;
    //获取最后一个元素的值
  cout<<*it<<endl;
  return 0;
} 
//输出结果
//0
//9

创建vector对象

  • 不指定容器元素个数
    例如一个整型容器
vector<int> v;
  • 创建时指定容器的大小
vector<double> v(10);
  • 每个元素的值被初始化为0.0
  • 创建具有n个元素的容器对象,每个元素都是指定的初值
vector<double> v(10,6.6);

尾部元素扩张

使用push_back()在vector容器尾部追加新元素,vector容器会自动分配新的内存空间。

可对空的vector对象扩张也可以对已有元素的vector扩张

#include<iostream>
#include<vector>
using namespace std;
int main(){
  vector<int> v;
  v.push_back(1);
  cout<<v[0]<<endl;
  return 0;
} 
//输出结果
//1

使用下标方式访问vector元素

类似数组

用迭代器访问vector元素

  • 迭代器的类型一定要与它要遍历的vector对象的元素类型一致
  • 使用迭代器配合循环语句来对vector对象进行遍历访问
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++){
  cout<<*it<<"\t";
}
cout<<endl;

元素的插入

  • insert() 方法可以在vector对象的任意位置前插入一个新的元素
  • 插入位置后的所有元素依次向后挪动一个位置
  • insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。
//在第2个元素前插入一个新元素1
v.insert(v.begin()+2,1);

元素的删除

  • erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素
  • 删除的区间,是左闭右开区间,[  )
  • 删除的位置,是元素的迭代器位置,而不是元素的下标。
  • clear()方法则以此性删除vector中的所有元素
//删除第2个元素
v.erase(v.begin()+2);
//删除迭代器从第1到第5区间的所有元素
//删除的包含第1位,不包含第5位
v.erase(v.begin()+1,b.begin()+5);
//清空向量
v.clear()

向量的大小

  • 使用size()方法可以返回向量的大小,即元素的个数
  • 使用empty()方法返回向量是否为空
v.size();
v.empty();

使用reverse()反向排列算法

  • reverse()算法可将向量中某段迭代器区间元素进行反向排列
  • 左闭右开区间,[  )
  • reverse反向排列算法,需要包含头文件 algorithm
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
  vector<int> v(10);
  for(int i=0;i<10;i++){
    v[i]=i;
  }
  reverse(v.begin(),v.end());
  vector<int>::iterator it;
  for(it=v.begin();it!=v.end();it++){
    cout<<*it<<"\t";
  }
  cout<<endl;
  return 0;
}

使用sort算法对向量元素排序

  • 使用sort算法,需要声明头文件
#include<algorithm>
  • sort算法要求使用随机访问迭代器进行排序,在默认情况下,对向量进行升序排列
  • 左闭右开区间,[  )
//升序排列sort(v.begin(),v.end());
  • 自己设计排序比较函数,然后把这个函数指定给sort算法。
    sort就根据这个比较函数指定的排序规则进行排序
//自己设计排序比较函数,对元素的值进行降序排列
bool Comp(const int& a,const int& b){
  return a>b;
}
sort(v.begin(),b.end(),Comp);
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool Comp(const int& a,const int& b);
int main(){
  vector<int> v(10);
  for(int i=0;i<10;i++){
    v[i]=i;
  }
  sort(v.begin(),v.end(),Comp);
  vector<int>::iterator it;
  for(it=v.begin();it!=v.end();it++){
    cout<<*it<<"\t";
  }
  cout<<endl;
  return 0;
} 
bool Comp(const int& a,const int& b){
  return a>b;
}
  • sort()函数的第三个参数,还可以使用这样的语句告诉程序所采用的排序原则
less<数据类型>()   //从小到达排序
greater<数据类型>()//从大到小排序
sort(v.begin(),v.end(),less<int>());
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool Comp(const int& a,const int& b);
int main(){
  vector<int> v(10);
  for(int i=0;i<10;i++){
    v[i]=i;
  }
  sort(v.begin(),v.end(),greater<int>());
  vector<int>::iterator it;
  for(it=v.begin();it!=v.end();it++){
    cout<<*it<<"\t";
  }
  cout<<endl;
  return 0;
}

两个STL

  • SGI STL是由Silicon Graphics Computer Systems 公司参照HP STL实现的,只要设计者仍是Alexandar Stepanov, 被Linux的C编译器GCC所采用。
    SGI STL是开源软件,可以在http://www.sgi.com/网站上下载。
  • STLport是俄国人Boris Fomitchev建立的一个free项目,是开放源代码的,主要目的是使SGI STL的基本代码都适用于VC和C Builder等多种编译器,源码可以在http://www.stlport.com/下载。
相关文章
|
4月前
|
存储 C++ 容器
如何将没有复制或移动构造函数的对象放入vector容器
如何将没有复制或移动构造函数的对象放入vector容器
42 0
|
6月前
|
C++ 容器
C++之评委打分案例(vector与deque容器练习)
C++之评委打分案例(vector与deque容器练习)
|
6月前
|
存储 算法 C++
【C++/STL】:vector容器的基本使用
【C++/STL】:vector容器的基本使用
42 1
|
5月前
|
存储 安全 C++
|
5月前
|
存储 算法 C++
【C++】详解STL容器之一的 vector
【C++】详解STL容器之一的 vector
|
6月前
|
算法 C++ 容器
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
269 0
|
6月前
|
算法 编译器 Linux
【C++/STL】:vector容器的底层剖析&&迭代器失效&&隐藏的浅拷贝
【C++/STL】:vector容器的底层剖析&&迭代器失效&&隐藏的浅拷贝
51 0
|
21天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
69 2
|
12天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
42 5
|
15天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。