C++ Vector 动态数组的实现

简介

  • 向量(Vector)是一个封装了动态大小数组的顺序容器。
  • 向量是一个能够存放任意类型的动态数组。

C++ 中 Vector 的使用

  • 头文件 #include <vector>
  • 需要使用 std 命名空间 using namespace std;
  • 以下使用方法以 int 数据类型为例,使用时可自定义数据类型
  • 注意:下文中区间为左闭右开

1. 定义(初始化)Vector

  • vector<int> v; 创建一个空vector
  • vector<int> v(5); 创建一个vector,元素个数为 5
  • vector<int> v(5); 创建一个元素个数为 5 且每个元素的值均为 10 的 vector
  • vector<int> v2(v1); 复制另一个 vector 使 v2 与 v1 相等
  • vector<int> v(begin,end);复制[begin,end)区间内另一个数组的元素到vector中
int a[]={2,4,6,8,10};
vector<int> v(&a[1],&a[3]);

2. 向 Vector 中增加元素

  • v.push_back(x) 向尾部增加一个元素 x
  • v.insert(pos,x) 向pos地址指向元素前增加一个元素 x
v.insert(v.begin(),666); //在首元素前插入元素 666
v.insert(v.begin()+1,666); //在第二个元素前插入元素 666

v.insert(pos,n,x) 向pos地址指向元素前增加 n 个相同的元素 x

v.insert(v.begin(),3,666); //在首元素前插入 3 个元素 666

v.insert(pos,first,last) 向pos地址指向元素前插入另一个相同类型向量[first,last)间的数据

v.insert(v.begin(),v2.begin(),v2.end()); //将v2所有元素插入v1之前

3. 删除 Vector 中元素

  • v.pop_back() 删除向量中最后一个元素
  • v.clear() 清空向量中所有元素
  • v.erase(pos) 删除向量中迭代器指向元素
v.erase(v.begin()); //删除首元素

v.erase(first,last): 删除向量中[first,last)中元素

v.erase(v.begin()+1,v.end()-1); //删除第二个到倒数第二个之间的元素

4. 遍历 Vector 中元素

  • v[i] 直接访问 Vector 中元素
  • v.at(pos)返回 pos 位置元素的值 pos下标从0开始 (类似数组)
  • v.front() 返回首元素的值
  • v.back() 返回尾元素的值
  • v.begin() 返回向量头指针,指向第一个元素
  • v.end() 返回向量尾指针,指向向量最后一个元素的下一个位置
  • v.rbegin() 反向迭代器,指向最后一个元素
  • v.rend() 反向迭代器,指向第一个元素之前的位置
//直接遍历元素
for(int i=0;i<v.size();i++)
{
 cout<<v[i]<<" ";
}

//使用迭代器遍历元素
for(vector<int>::iterator i=v.begin();i<v.end();i++)
{
 cout<<*i<<" ";
}

//使用反向迭代器遍历元素(倒序输出)
for(vector<int>::reverse_iterator i=v.rbegin();i<v.rend();i++)
{
 cout<<*i<<" ";
}

5. 其他常用方法

  • v.empty() 判断向量是否为空,为空返回1否则返回0
  • v.size() 返回向量中元素的个数
  • v.capacity() 返回当前向量所能容纳的最大元素数量
  • v.max_size() 返回最大可允许的vector元素数量值
  • v.swap(v2) 交换两个同类型向量 v 和 v2
  • v.assign(n,x) 把向量中第 n 个元素的值设为 x
  • v.assign(first,last) 将向量中[first,last)元素设置成当前向量元素
//将v中元素设置为v2中元素
v.assign(v2.begin(),v2.end());

总结一下常用语法

语法 说明
vector<int> v; 创建空vector
v.push_back(x) 向尾部增加一个元素 x
v.insert(pos,x) 向pos地址指向元素前增加一个元素 x
v[i] 访问 i 位置元素
v.pop_back() 删除向量中最后一个元素
v.clear() 清空向量中所有元素
v.empty() 判断向量是否为空
v.size() 返回向量中元素的个数
v.begin() 返回向量头指针(迭代器),指向第一个元素
v.end() 返回向量尾指针(迭代器),指向最后一个元素+1位置

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 动态数组C++实现方法(分享)

    回顾大二的数据结构知识.从数组开始.实现了一个可自动扩充容量的泛型数组. 头文件:Array.h #ifndef Array_hpp #define Array_hpp template <class T> class Array{ private: T *base; //数组首地址 int length; //数组中元素 int size; //数组大小,以数组中元素的大小为单位 public: //初始化数组,分配内存 bool init(); //检查内存是否够用,不够用就增加 bool

  • C++动态数组类的封装实例

    C++中的动态数组(Dynamic Array)是指动态分配的.可以根据需求动态增长占用内存的数组.为了实现一个动态数组类的封装,我们需要考虑几个问题:new/delete的使用.内存分配策略.类的四大函数(构造函数.拷贝构造函数.拷贝赋值运算符.析构函数).运算符的重载.涉及到的知识点很多,对此本文只做简单的介绍. 一.内存分配策略 当用new为一个动态数组申请一块内存时,数组中的元素是连续存储的,例如 vector和string.当向一个动态数组添加元素时,如果没有空间容纳新元素,不可能简单

  • C/C++ 动态数组的创建的实例详解

    C/C++ 动态数组的创建的实例详解 在C++语言中,二维动态数组主要使用指针的方法建立,以建立一个整数二维数组为例: #include<iostream> #include<string> #include<malloc.h> using namespace std; int main(int argc,char **argv) { ///*int a[2][3]={{1,2,3},{4,5,6}}; //cout<<sizeof(a+1)<<

  • c++创建二维动态数组与内存释放问题

    如下: #include <iostream> #include <windows.h> using namespace std; int main() { cout << "create dynamic two-dimension array..." << endl; int sizeX = 5; int sizeY = 8; // 申请 double** array = new double*[sizeX]; for (int i =

  • C++中关于[]静态数组和new分配的动态数组的区别分析

    本文以实例分析了C++语言中关于[]静态数组和new分配的动态数组的区别,可以帮助大家加深对C++语言数组的理解.具体区别如下: 一.对静态数组名进行sizeof运算时,结果是整个数组占用空间的大小: 因此可以用sizeof(数组名)/sizeof(*数组名)来获取数组的长度. int a[5]; 则sizeof(a)=20,sizeof(*a)=4.因为整个数组共占20字节,首个元素(int型)占4字节. int *a=new int[4];则sizeof(a)=sizeof(*a)=4,因为

  • C++实现动态数组功能

    数组 数组是一种线性表数据结构.它用一组连续内存空间,来存储一组具有相同数据类型数据. 1.线性表:数据存储像一条线一样的结构,每个线性表上的数据最多只有前和后的两个方向,如数组.链表.队列.栈等都是这种结构,所以实现的数组的动态操作,其他结构也可轻易的类似实现.更重要的是,在这之后看源码就可大大降低难度.(博主自己看的是STL源码剖析) 2.非线性表:如二叉树.堆.图等. 3连续内存空间和相同数据类型:当数组作插入.删除操作时,为了保证数据的连续性,往往需要做大量的数据搬移工作,效率很低. 动

  • C++ Vector 动态数组的实现

    简介 向量(Vector)是一个封装了动态大小数组的顺序容器. 向量是一个能够存放任意类型的动态数组. C++ 中 Vector 的使用 头文件 #include <vector> 需要使用 std 命名空间 using namespace std; 以下使用方法以 int 数据类型为例,使用时可自定义数据类型 注意:下文中区间为左闭右开 1. 定义(初始化)Vector vector<int> v; 创建一个空vector vector<int> v(5); 创建一个

  • 使用C语言实现vector动态数组的实例分享

    下面是做项目时实现的一个动态数组,先后加入了好几个之后的项目,下面晒下代码. 头文件: # ifndef __CVECTOR_H__ # define __CVECTOR_H__ # define MIN_LEN 256 # define CVEFAILED -1 # define CVESUCCESS 0 # define CVEPUSHBACK 1 # define CVEPOPBACK 2 # define CVEINSERT 3 # define CVERM 4 # define EXP

  • C++详解如何实现动态数组

    目录 动态数组 示例代码 运行环境 运行效果 动态数组 动态数组Vector可以动态扩展内存,其采用连续的内存空间,当内存空间不足,便以原来的容量的2倍或者1.5倍成倍的扩展,将原有的数组元素拷贝到新分配的内存空间中,释放原有的内存空间,新的元素将存入的新分配的内存空间. 示例代码 动态数组vector的size函数和capacity函数,分别作为求数组中现有的元素的个数和数组所能容纳的元素的个数.下面直接上实现的代码. DynamicArray .h #pragma once class Dy

  • JavaScript中的索引数组、关联数组和静态数组、动态数组讲解

    数组分类: 1.从数组的下标分为索引数组.关联数组 复制代码 代码如下: /* 索引数组,即通常情况下所说的数组 */ var ary1 = [1,3,5,8]; //按索引去取数组元素,从0开始(当然某些语言实现从1开始) //索引实际上就是序数,一个整型数字 alert(ary1[0]); alert(ary1[1]); alert(ary1[2]); alert(ary1[3]);   /* 关联数组,指以非序数类型为下标来存取的数组  python中称为字典 */ var ary2 =

  • Java版C语言版简单使用静态语言实现动态数组的方法

    动态语言相对于静态语言的一个优势,就是数组可以不需要预先确定大小,对于一些数组长度不确定的场景下是非常有用的.像PHP,只需要声明一下数组 $arr = array() 然后就可以直接 $arr[] = 1,$arr[] = 2,$arr[] = 3...这样一直加元素了,删除一个元素就直接使用unset($arr[1]),元素的空间就被释放了,而C和JAVA原生的数组就没有这么方便,声明的时候就必须先预先确定长度,由编译器分配相应的内存空间.不过通过一些巧妙的做法,也是可以实现一样的功能的,这

  • asp中使用redim、preserve创建动态数组实例

    asp中REDIM的功能是动态定义数组长度 动态数组里面的一个语句,只能出现在过程里面,可以多次使用.可以改变数组大小,和维数. 格式: REDIM [Preserve] 数组名(下标1[下标2....]) Preserve 保留动态数组的内容(不用的话,每次执行REDIM语句,当前存储的语句会全部丢失) 例如: 复制代码 代码如下: Dim DynArray() '定义数组DynArray()为动态数组 REDIM Preserve DynArray(20)'为该数组分配元数个数 这样对编程中

  • asp 得到动态数组中元素的个数

    一个动态数组 a,如果你已经使用redim 语句给它设定了大小,那么在此之后使用 ubound(a) 就可以得到它的上边界. 如果你没有使用 redim 语句给它设定大小,直接使用 ubound(a) 函数,那么运行时会报错,并会中断程序的执行.我们恰恰利用这一点,可以知道这个数组还没有任何元素.于此同时,我们却不想程序中断执行,那么可以在 ubound(a) 函数执行前加上一句 复制代码 代码如下: on error resume next 把本功能写成一个函数 function get_el

随机推荐