vector嵌套vector用法 vector中函数用法

一:介绍

vector是C++标准模板库,是一个容器,底层是数组,为连续内存。

命名空间为std,所属头文件为<vector> 注意:不是<vector.h>

vector存储数据时,会分配一个存储空间,如果继续存储,该分配的空间已满,就会分配一块更大的内存,把原来的数据复制过来,继续存储,这些性能也会一定程度上会有损耗

二:常用操作

1.容量

a.vector大小:vector.size()

b.vector所占内存实际大小:vector.capacity()

2.修改

a.尾部添加元素:vector.push_back()

b.尾部删除元素:vector.pop_back()

c.交换两个vector元素:vector.swap()

d.清空vector元素:vector.clear()

e.删除指定元素:vector.erase(it)

3.迭代器

a.vector开始指针:vector.begin()

b.vector尾部指针:vector.end() 注:最后一个元素的下一个位置,类似为NULL,不是容器的最后一个元素

4.访问元素

a.下标访问:vector //不检查是否越界

b.at方法访问:vector.at(1) //自动检查是否越界,如越界会抛出异常

c.访问第一个元素:vector.front()

d.访问最后一个元素:vector.back()

三:存储

简单存储

1 //存储方式1 2 vector<int> v1(10); 3 for (int i=0; i<10; i++) 4 { 5 v1 = i; 6 } 7 //存储方式2 8 vector<int> v2; 9 for (int i=0; i<10; i++) 10 { 11 v2.push_back(i); 12 }

存储结构体和结构体指针

1 struct Student 2 { 3 char name; 4 int age; 5 }; 6 7 //存储结构体 8 vector<Student> vStu1; 9 for (int i=0; i<10; i++) 10 { 11 Student stu; 12 strcpy(stu.name, “woniu201”); 13 stu.age = 30 + i; 14 vStu1.push_back(stu); 15 } 16 //存储结构体指针 17 vector<Student*> vStu2; 18 for (int i=0; i<10; i++) 19 { 20 Student* pStu = (Student*)malloc(sizeof(Student)); 21 strcpy(pStu->name, “woniu201”); 22 pStu->age = 30 + i; 23 vStu2.push_back(pStu); 24 }

四:遍历

1 vector<int> v; 2 for (int i=0; i<100; i++) 3 { 4 v.push_back(i); 5 } 6 //遍历方式1 7 for (int i=0; i<100; i++) 8 { 9 int& a = v; 10 printf(“%d “, a); 11 } 12 //遍历方式2 13 for (vector<int>::iterator it = v.begin(); it != v.end(); it++) 14 { 15 int&a = *it; 16 printf(“%d “, a); 17 }

五:排序

对vector整形进行排序

1 include <vector> 3 #include <algorithm> 4 5 using namespace std; 6 7 //升序比较函数 8 int compare1(const int &a, const int &b) 9 { 10 return a < b; 11 } 12 13 //降序比较函数 14 int compare2(const int &a, const int &b) 15 { 16 return a > b; 17 } 18 19 int main() 20 { 21 vector<int> v; 22 for (int i=0; i<10; i++) 23 { 24 v.push_back(rand() % 10); 25 } 26 27 //遍历输出 28 printf(“排序前数据:”); 29 for (vector<int>::iterator it = v.begin(); it != v.end(); it++) 30 { 31 printf(“%d “, *it); 32 } 33 34 //升序排序 35 sort(v.begin(), v.end(), compare1); 36 37 //遍历输出 38 printf(“\n升序后数据:”); 39 for (vector<int>::iterator it = v.begin(); it != v.end(); it++) 40 { 41 printf(“%d “, *it); 42 } 43 44 //降序排序 45 sort(v.begin(), v.end(), greater<int>()); 46 47 //遍历输出 48 printf(“\n降序后数据:”); 49 for (vector<int>::iterator it = v.begin(); it != v.end(); it++) 50 { 51 printf(“%d “, *it); 52 } 53 54 getchar(); 55 return 1; 56 }

对存放类成员变量排序

1 #include <string> 2 #include <vector> 3 #include <algorithm> 4 using namespace std; 5 6 class Student { 7 public: 8 Student(string n, int c) :name(n), core(c) {} 9 10 string name; 11 int core; 12 }; 13 14 //升序比较函数 15 bool compare1(const Student& s1, const Student& s2) 16 { 17 return s1.core < s2.core; 18 } 19 20 //降序比较函数 21 bool compare2(const Student& s1, const Student& s2) 22 { 23 return s1.core > s2.core; 24 } 25 26 27 int main() 28 { 29 vector<Student> v; 30 Student s1(“aaaa”, 97); 31 Student s2(“bbbb”, 99); 32 Student s3(“cccc”, 95); 33 34 v.push_back(s1); 35 v.push_back(s2); 36 v.push_back(s3); 37 38 printf(“排序前数据:\n”); 39 for (vector<Student>::iterator it = v.begin(); it != v.end(); it++) 40 { 41 printf(“%s; %d\n”, ((*it).name).c_str(), (*it).core); 42 } 43 44 //升序排序 45 sort(v.begin(), v.end(), compare1); 46 47 printf(“\n升序后的数据:\n”); 48 for (vector<Student>::iterator it = v.begin(); it != v.end(); it++) 49 { 50 printf(“%s; %d\n”, ((*it).name).c_str(), (*it).core); 51 } 52 53 //降序排序 54 sort(v.begin(), v.end(), compare2); 55 printf(“\n降序后的数据:\n”); 56 for (vector<Student>::iterator it = v.begin(); it != v.end(); it++) 57 { 58 printf(“%s; %d\n”, ((*it).name).c_str(), (*it).core); 59 } 60 getchar(); 61 return 1; 62 }

六:查找

1 vector<int>::iterator it = find(v.begin(), v.end(), 5); 2 if(it != v.end()) 3 { 4 cout << “found”; 5 } 6 else 7 { 8 cout << “not found”; 9 }

七:删除

1 for(vector<int>::iterator it=v.begin(); it != v.end(); it++) 2 { 3 if(*it == 8) 4 { 5 it = v.erase(it);//it会++一次 6 it–; //删除完后需要–,否则最终循环越界 7 } 8 }

八:释放内存

存放整形vector释放

1 //存放整型 2 vector<int> v; 3 for (int i=0; i<100; i++) 4 { 5 v.push_back(i); 6 } 7 //释放内存 8 vector<int> (v).swap(v);

存放结构体vector释放

//存储结构体 vector<Student> vStu1; for (int i=0; i<10; i++) { Student stu; strcpy(stu.name, “wangpengfei”); stu.age = 30 + i; vStu1.push_back(stu); } //释放内存 vector<Student> (vStu1).swap(vStu1);

存放结构体指针vector释放

1 //存储结构体指针 2 vector<Student*> vStu2; 3 for (int i=0; i<10; i++) 4 { 5 Student* pStu = (Student*)malloc(sizeof(Student)); 6 strcpy(pStu->name, “wangpengfei”); 7 pStu->age = 30 + i; 8 vStu2.push_back(pStu); 9 } 10 //释放内存 11 for (vector<Student*>::iterator it = vStu2.begin(); it != vStu2.end(); it++) 12 { 13 if (NULL != *it) 14 { 15 delete *it; 16 *it = NULL; 17 } 18 }

vector嵌套vector用法 vector中函数用法

本文【vector嵌套vector用法 vector中函数用法】由作者: 乐观锁 提供,本站不拥有所有权,只提供储存服务,如有侵权,联系删除!
本文链接:https://www.cuoshuo.com/blog/4541.html

(0)
上一篇 2023-03-15 08:25:17
下一篇 2023-03-15 08:36:28

相关推荐

  • static变量和static代码块_static变量的作用

    1. 概述 static 是一种修饰符 static 是Java中表静态的关键字 它可以修饰成员变量、成员方法、代码块 被static修饰的成员变量或成员方法,将不再依赖于对象的创建而去使用,而是依赖类的存在,成为类成员或类方法,是共享的(下面将会详细的解释)。 2. static修饰成员变量 2.1 常见的修饰符 public 修饰符 private 修饰…

    2023-03-09
    700
  • 马哥linux2022

    本文将为那些渴望学习Linux,但又缺乏相应资料和方向的朋友,提供21套Linux优质资料,包含入门到进阶,希望能对大家有所帮助。 此合集内容及其丰富,涉及方面颇多,不仅适合Linux入门学习的朋友,运维朋友也建议收藏! 【文末有领取方式!!】 资料列表: 1、思维导图(基础+进阶两幅) 2、官方文档汇总(Ansible、Ceph、Prometheus、Ng…

    2023-03-22
    000
  • 嵌入式fpga是什么意思_fpga取代嵌入式

    数字集成电路有两种类型:ASIC和FPGA(现场可编程门阵列)。专用集成电路(ASIC)有一个预先定义的特定硬件功能,在生产后不能重新编程。但FPGA可以在制造后可无限编程。 FPGA是一种集成电路,一种可编程芯片,它允许工程师对定制的数字逻辑进行编程,可以根据程序改变其硬件逻辑。主要目的是允许工程师重新设计和重新配置他们的芯片更快,更便宜,只要他们想要,然…

    2023-03-09
    900
  • 冒泡排序算法c语言代码_输入n个数进行冒泡排序C语言

    C语言是过去几十年软件和硬件两个阵营之间,签署的最坚实的契约。硬件为C语言的语义提供了最能发挥其性能的基础构件,而软件虽然搞了很多的圆环套圆环般的层次,但最终都以C语言作为最后的沉淀收尾。—-后面也会有C版的迷你程序!!! 之所以起头写这样系列的文档,主要是锻炼自己的编码能力,类似于leetcode吧。 浅话到此,C版的迷你程序、Python版的…

    2023-03-09
    500
  • 王者的空格符号怎么打,王者空格如何打出空格

    王者改名专用空格怎么打出来的?王者荣耀改名专用空格怎么弄?在王者荣耀中,改名字是不允许输入空格的,但是不少玩家发现还是有人的昵称带了空格,这是怎么做到的呢?想要知道原因或者也想要空格昵称的玩家快跟着小编往下看,下面介绍了王者荣耀改名专用空格的输入方式,你可以直接复制使用! 王者荣耀改名专用空格怎么弄: 进入游戏后提示起游戏名,这里需要复制→【   】这个(只…

    2023-03-12
    300
  • 遗传算法原理及应用pdf_遗传算法与工程优化pdf

    遗传算法 ( GA , GeneticAlgorithm ) ,也称进化算法 。 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。因此在介绍遗传算法前有必要简单地介绍生物进化知识。 一.进化论知识 作为遗传算法生物背景的介绍,下面内容了解即可: 种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群。 …

    2023-03-18
    000
  • 求函数定义域的例题及解析 高一数学定义域基础题

    函数的地位:函数是中学数学的核心概念,数学是以函数为基础的探究。得函数者,得数学! 函数讲究,数形结合,以形助数! 函数三要素:定义域、值域、对应法则。 一、求定义域 1.求函数定义域的基本原则: 2.求解抽象函数的定义域: 求定义域的终极解法:记住两条:1题目给的定义域是x的取值范围2.括号内范围一致。 3.已知定义域逆向求参。 解题思路:学会将条件转化。…

    2023-03-13
    800
  • osi七层模型各层的设备_osi七层模型的协议

    今天这篇文章我们带你搞懂OSI七层模型和TCP/IP基础知识,并结合OSI七层模型来介绍二、三层交换机和路由器的工作原理。 首先,一起来了解下什么是OSI七层模型? 简言之,下4层主要完成通信子网的功能,上3层主要完成资源子网的功能。 其实互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分成七层。实际上这…

    2023-03-08
    700
  • c语言基础知识入门编程

    1. C/C++ 的历史及特点 有关计算机的历史、C 语言的历史、C++ 的历史,以及各自有什么特点,甚至哪年谁谁谁发明了什么等等,请自行网上搜索。 2. 编程思维 乔布斯说过:“每个人都应该学习编程,因为它会教给你如何思考。” 从厨神的故事开始 我相信每个人对“编程”这个词都有自己的认识。我从一个小故事说起吧。 有个厨神,开了一家小饭店,人们非常喜欢吃他做…

    2023-03-17
    100
  • 平面广告设计实用教程(广告平面设计是什么)

    1、软件 工欲善其事,必先利其器——先把软件工具学好,不然你有再好的想法都无法实现。photoshop(ps)、coreldraw(cdr)、illustrator(ai),这是现在市场上主流的平面设计软件。ps不用说,这是肯定要学的。主要用来图像处理、图像合成的。 2、色彩搭配 任何一幅设计作品都需要色彩的参与,不管你是平面设计、网页设计或者其他的啥设计。…

    2023-03-16
    100

发表回复

登录后才能评论
返回顶部
错说博客上线啦!