热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

简单讲解c++vector

这篇文章主要介绍了c++vector的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下

在c++中,vector是一个十分有用的容器。

作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。

特别注意:

使用vector需要注意以下几点:

1.加入头文件

2.如果你要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低;

3.Vector作为函数的参数或者返回值时,需要注意它的写法:

double Distance(vector &a, vector &b) 其中的“&”绝对不能少!!!

一维vector

创建一维vector:

vector nums;    //不指定长度
vector nums(n);  //指定长度为n

添加元素

nums.push_back(1);   //直接从数组末端添加
nums[i]=1;       //直接赋值给第i个位置
nums.insert(nums.begin()+i,a); //在第i+1个元素前插入a

删除元素

nums.resize(nums.size-i);  //直接将数组长度减少,某种意义上删掉了后面i个
nums.pop_back();       //删掉最后一个元素
nums.erase(nums.begin()+i); //删掉第i+1个元素
nums.erase(nums.begin()+i,nums.end()+j);  //删除区间[i,j-1],区间从0开始
nums.clear();        //清空

其它

获取长度:nums.size();

排序(O(nlogn)):sort(nums.begin(),nums.end());

翻转:reverse(nums.begin(),nums.end());

合并两个vector:合并nums1和nums2,并将合并的数组赋值给nums

vector nums1(m),nums2(n);
vector nums;
nums.resize(m+n);
merge(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),nums);

二维vector

创建M*n二维vector

vector > nums(m,vector(n));  //m*n的二维vector

解释:

定义了一个vector容器,元素类型为vector ,初始化为包含m个vector 对象,每个对象都是一个新创立的vector 对象的拷贝,而这个新创立的vector 对象被初始化为包含n个0。

vector (n)表示构造一个无名且含n个0的vector 对象。

动态创建m*n的二维vector

方法一

vector > nums;3

nums.resize(m);
for(int i=0;i

方法二

vector > nums;
nums.resize(m,vector(n));

初始化二维数组

vector > nums(m ,vector(n,0));  //m*n的二维vector,所有元素为0

获得二维数组的行数:nums.size();

获得二维数组的列数:nums[0].size();

数组遍历

int m = nums.size(),n = nums[0].size();
for(int i = 0; i 

用vector还可以用结构体类型哟

以上就是简单讲解c++ vector的详细内容,更多关于c++&vector的资料请关注其它相关文章!


推荐阅读
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 本文详细探讨了Netty中Future及其子类的设计与实现,包括其在并发编程中的作用和具体应用场景。我们将介绍Future的继承体系、关键方法的实现细节,并讨论如何通过监听器和回调机制来处理异步任务的结果。 ... [详细]
author-avatar
鉴湖侠ph
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有