vector容器

news2025/1/12 12:01:18

1、vector简介

vector 和 arry 非常相似,唯一存在的不同是 vector 是动态分配内存空间,随着元素的增加空间自动增加,但是 arry 是静态的
wector:单端动态数组容器,只允许在一端进行操作
在这里插入图片描述

2、vector的使用

需要引进头文件

#include <vector>

vector是一个类模板,所以使用下面方式定义

 vector<int> v1;   //使用 <>表明类模板的数据类型

,使用尖括号表明元素的类型

定义迭代器:每一个容器对应唯一一个迭代器,保存的是容器的首元素位置,但是在 STL 中没有所谓的元素的地址一说

#include <iostream>
#include <vector>
using namespace std;
void test01()
{
    vector<int> v1;        //容器是一个模板类,需要指明容器中的数据类型 
    v1.push_back(10);
    v1.push_back(20);
    v1.push_back(30);
    v1.push_back(40);
    v1.push_back(50);
    
    //每一个容器有一个唯一的首元素地址也就是有一个唯一的迭代器 
    vector<int>::iterator it = v1.begin();          //使用begin保存元素的首地址,用于遍历容器中的各个元素
	for(;it!=v1.end();it++){
		cout<<*it<<endl;
	}
	return; 
}

int main(){
	test01();
	return 0;
} 

在这里插入图片描述
在这里插入图片描述

3、vector的构造函数

在这里插入图片描述

void printVectorInt(vector<int> &v)
{
    vector<int>::iterator it;
    for(it=v.begin(); it!=v.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}

void test02(){
	vector<int> v(5,100);  //n个元相同元素的构造
	printVectorInt(v);
	vector<int> v1 = v;    //拷贝构造
	printVectorInt(v1);
	vector<int> v2(v1.begin(),v1.end());    //区间拷贝构造
	printVectorInt(v2);
}



int main(){
	test02();
	return 0;
} 

在这里插入图片描述

4、vector的赋值操作

在这里插入图片描述

vector<int> v3;               //重载的赋值运算符 
	v3 = v2;
	printVectorInt(v3);
	v3.assign(10,10);             //10个10 
	printVectorInt(v3);
	v3.swap(v2);                   //交换 v3 和 v2
	printVectorInt(v2);
	printVectorInt(v3);

5、vector大小操作

在这里插入图片描述
在这里插入图片描述
v6.resize(20,50)是过大补为 50,但是第一个是过大补为 0

 cout<<"大小:"<<v4.size()<<" 容量:"<<v4.capacity()<<endl;
    //容器是否为空
    vector<int> v5;
    if(v5.empty())
    {
        cout<<"空"<<endl;
    }
    else
    {
        cout<<"非空"<<endl;
    }

    vector<int> v6(10, 30);
    cout<<"大小:"<<v6.size()<<" 容量:"<<v6.capacity()<<endl;
    printVectorInt(v6);
    //v6.resize(20);//过大补0
    //v6.resize(20, 50);//过大补50
    v6.resize(32);
    cout<<"大小:"<<v6.size()<<" 容量:"<<v6.capacity()<<endl;
    printVectorInt(v6);

6、vector的存取操作

vector<int> v1;
    v1.push_back(10);
    v1.push_back(20);
    v1.push_back(30);
    v1.push_back(40);
    v1.push_back(50);

    cout<<"头元素:"<<v1.front()<<"   尾元素:"<<v1.back()<<endl;
    //at越界抛出异常  【】越界不会抛出异常
    cout<<v1.at(1)<<" "<<v1[1]<<endl;
    v1.at(1)=200;
    v1[3]=300;
    printVectorInt(v1);//10 200 30 300 50

6、vector的增、删

在这里插入图片描述

v1.pop_back();//尾删
    printVectorInt(v1);//10 200 30 300
    v1.insert( v1.begin()+2, 3, 500 );
    printVectorInt(v1);//10 200 500 500 500 30 300
    v1.erase(v1.begin()+2, v1.begin()+5 );
    printVectorInt(v1);//10 200 30 300
    v1.clear();
    cout<<"大小:"<<v1.size()<<" 容量:"<<v1.capacity()<<endl;

7、容器嵌套容器

void test05()
{
    vector<int> v1(5,10);
    vector<int> v2(5,100);
    vector<int> v3(5,1000);

    //需求:定义一个容器 存放v1 v2 v3
    vector< vector<int> > v;
    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);

    //遍历
    vector< vector<int> >::iterator it;
    for(it=v.begin(); it!=v.end(); it++)
    {
        //*it == vector<int>
        vector<int>::iterator mit;
        for(mit=(*it).begin();mit!=(*it).end();mit++ )
        {
            //*mit == int
            cout<<*mit<<" ";
        }
        cout<<endl;
    }
}

8、使用算法对 vector 进行排序

#include<algorithm>//算法头文件
bool myCompare(int value1, int value2)      //自定义排序规则 
{
    return value1<value2;
}
void test06()
{
    vector<int> v1;
    v1.push_back(20);
    v1.push_back(60);
    v1.push_back(30);
    v1.push_back(50);
    v1.push_back(40);
    v1.push_back(10);
    printVectorInt(v1);

    //sort算法排序,默认从小到大 
    sort(v1.begin(), v1.end());
    //sort(v1.begin(), v1.end(), greater<int>());  greater<int>是仿函数,提供排序策略 
    //sort(v1.begin(), v1.end(), myCompare);     myCompare是自定义排序规则 
    printVectorInt(v1);
}

9、vector存放自定义类型

class Person
{
    friend void printVectorPerson(vector<Person>  &v);
    friend bool myComparePerson(const Person &ob1,  const Person &ob2);
private:
    int num;
    string name;
    float score;
public:
    Person(){}
    Person(int num, string name, float score)
    {
        this->num = num;
        this->name = name;
        this->score = score;
    }
#if 0
    //方法2:重载自定义数据的<运算符
    bool operator<(const Person &ob)
    {
        return this->num < ob.num;
    }
#endif
};
void printVectorPerson(vector<Person>  &v)
{
    vector<Person>::iterator it;
    for(it=v.begin(); it!=v.end(); it++)
    {
        //*it == Person
        cout<<(*it).num<<" "<<(*it).name<<" "<<(*it).score<<endl;     //访问私有数据必须使用友元 
    }
}
//方法1:对于自定义容器排序 必须实现 排序规则
bool myComparePerson(const Person &ob1,  const Person &ob2)
{
    if(ob1.num == ob2.num)
        return ob1.score<ob2.score;
    return ob1.num > ob2.num;
}

void test07()
{
    vector<Person> v;

    v.push_back(Person(100, "lucy", 88.8f));
    v.push_back(Person(103, "bob", 99.8f));
    v.push_back(Person(103, "tom", 77.8f));
    v.push_back(Person(103, "德玛", 88.8f));
    v.push_back(Person(101, "小法", 66.8f));

    printVectorPerson(v);
    //方法1:对于自定义容器排序 必须实现 排序规则
    sort(v.begin(), v.end(), myComparePerson);
    //方法2:重载自定义数据的<运算符
    //sort(v.begin(), v.end());
    cout<<"--------------"<<endl;
    printVectorPerson(v);
}

在这里插入图片描述

10、vector的应用范围

vector只是单纯地保存数据,这些数据没有什么规律

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/416298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyTorch深度学习实战 | 基于多层感知机模型和随机森林模型的某地房价预测

简介&#xff1a; 在现实生活中&#xff0c;除了分类问题外&#xff0c;也存在很多需要预测出具体值的回归问题&#xff0c;例如年龄预测、房价预测、股价预测等。相比分类问题而言&#xff0c;回归问题输出类型为一个连续值&#xff0c;如下表所示为两者的区别。在本文中&…

打造高效自动化测试流程:Jenkins+Allure+Pytest环境搭建和实战

引言 自动化测试已经成为软件开发中不可或缺的一部分。而在自动化测试中&#xff0c;Jenkins、Allure和Pytest这三个工具的组合可以说是非常流行和实用的。 Jenkins作为持续集成工具&#xff0c;可以充分利用其丰富的插件体系来搭建自动化测试环境&#xff1b; Allure则为我们…

怎么把jpg转换成pdf格式?实用又简单的方法来了

在工作和学习中&#xff0c;我们常常需要发送一些重要的图片给别人&#xff0c;这些图片可能包含学习资料或者重要的文件内容。但是发送多个JPG图片既不方便又不直观&#xff0c;所以我们需要将它们转换成PDF格式&#xff0c;以便于发送和查看。如果你不知道如何进行JPG到PDF的…

UI学习路线图2023完整版(适合自学)

作为数字时代中不可或缺的职业之一&#xff0c;UI设计师在今天和未来都有着广阔的职业前景。UI设计师有高需求行业、薪资高、职位晋升空间大、多样化的工作机会、职业发展空间大等许多优势&#xff0c;也有很多小伙伴想自学UI设计&#xff0c;但是不知道自己怎么学&#xff0c;…

服务器节点之间 如何实现自动化文件同步?

大数据、云计算、物联网的发展&#xff0c;使得企业能够拥有的数据急剧增加。面对快速变化和增长的庞大数据&#xff0c;如何高效地管理、利用数据对于企业来说至关重要。 但是&#xff0c;数据传输模式单一、自动化程度低、传输效率低下等难题&#xff0c;阻碍着企业对其数字…

TensorFlow 1.x 深度学习秘籍:6~10

原文&#xff1a;TensorFlow 1.x Deep Learning Cookbook 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如…

高级UI之Android事件分发机制原理及源码分析

前言 在 Android 中&#xff0c;事件分发机制是一块很重要的知识点&#xff0c; 掌握这个机制能帮你在平时的开发中解决掉很多的 View 事件冲突问题&#xff0c;这个问题也是面试中问的比较多的一个问题了&#xff0c;本篇就来总结下这个知识点。 事件分发原因 Android 中页…

RK3399平台开发系列讲解(外设篇)Camera OV13850配置过程

🚀返回专栏总目录 文章目录 一、DTS 配置二、驱动说明三、配置原理四、cam_board.xml沉淀、分享、成长,让自己和他人都能有所收获!😄 📢我们以 OV13850/OV5640 摄像头为例,讲解在该开发板上的配置过程。 一、DTS 配置 isp0: isp@ff910000 {…status = "okay&quo…

R-CNN(Region with CNN feature)

目录 1. 介绍 2. R-CNN 2.1 SS(Selective Search) 算法 生成候选框 2.2 CNN 提取特征 2.3 SVM 分类 非极大值抑制 2.4 回归器微调候选框 3. R-CNN 的缺点 1. 介绍 目标识别的发展历史如图 2. R-CNN RCNN 是两阶段目标检测的鼻祖&#xff0c;类似于深度学习开山之作Al…

第03章_流程控制语句

第03章_流程控制语句 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 流程控制语句是用来控制程序中各语句执行顺序的语句&#xff0c;可以把语句组合成能完成一定功能的小逻辑模…

算法记录 | Day32 贪心算法

122.买卖股票的最佳时机II 贪心算法 思路&#xff1a; 把利润分解为每天为单位的维度&#xff0c;而不是从0天到第3天整体去考虑&#xff01; 那么根据prices可以得到每天的利润序列&#xff1a;(prices[i] - prices[i - 1])…(prices[1] - prices[0])。 如图&#xff1a;…

PyCharm+PyQt5+pyinstaller打包labelImg.exe

0 开头 labelImg是一款标注软件&#xff0c;作为一个开源项目&#xff0c;它的源码可以在github上找到。官方仓库地址为&#xff1a; https://github.com/heartexlabs/labelImg 小白安装时的最新版本编译出来的界面长这样&#xff1a; 之前在小白的博客里&#xff0c;也教过…

Spring学习5

一、代理模式 代理模式就是AOP的底层&#xff01; 1.代理模式的分类 静态代理动态代理2.静态代理 角色分析&#xff1a; 抽象角色&#xff1a;一般使用接口或者抽象类来解决真实角色&#xff1a;被代理的角色代理角色&#xff1a;代理真实角色后&#xff0c;一般会做一些附属操…

走进小程序【七】微信小程序【常见问题总结】

文章目录&#x1f31f;前言&#x1f31f;小程序登录&#x1f31f;unionid 和 openid&#x1f31f;关键Api&#x1f31f;登录流程设计&#x1f31f;利用现有登录体系&#x1f31f;利用OpenId 创建用户体系&#x1f31f;利用 Unionid 创建用户体系&#x1f31f;授权获取用户信息流…

JVM内存模型详解

JVM内存模型和Java内存模型都是面试的热点问题&#xff0c;名字看感觉都差不多&#xff0c;实际上他们之间差别还是挺大的。 通俗点说&#xff0c;JVM内存结构是与JVM的内部存储结构相关&#xff0c;而Java内存模型是与多线程编程相关mikechen。 什么是JVM JVM是Java Virtual …

【教学类-30-04】10以内减法题不重复(一页两份)(包括6以内、7以内、8以内、9以内、10以内减法题 只抽取25个)

作品展示 ——10以内不重复减法题 需求&#xff1a; 1、制作10以内减法题 材料准备&#xff1a; Word模板 代码展示&#xff1a; 6、7、8、9、10以内减法一页两份&#xff08;10以内减法一页两份&#xff08;6以内、7以内、8以内、9以内、10以内不重复减法题&#xff09; 时间…

文件访问被拒绝?5个解决方法!

案例&#xff1a;文件访问被拒绝 【朋友们&#xff0c;想问问大家的电脑有遇到过文件访问被拒绝的情况吗&#xff1f;真的太头疼了&#xff0c;大家都是怎么解决的呢&#xff1f;】 在日常使用电脑和操作文件时&#xff0c;有时我们可能会遇到文件访问被拒绝的情况。这可能会…

Scala框架Akka学习

Scala框架Akka 文章目录Scala框架AkkaAkka概述Akka特点Akka与Scala.actors.Actor的关系Akka模型介绍Actor模型的优点Akka模型的核心概念如何创建Actor添加依赖在Akka中&#xff0c;Actor负责通信&#xff0c;在Actor中有一些重要的生命周期方法**akka的架构原理**创建Actor的步…

Charles二次开发-接口解密

1&#xff0c;使用背景 最近工作中对公司接口进行抓包&#xff0c;发现接口路径和返回都是经过加密的&#xff0c;对于查看接口路径及接口返回结果带来了不便&#xff0c;于是想到了对Charles进行小改造&#xff0c;在Charles上增加一个按钮对加密的请求、响应结果解密&#x…

[学习笔记]计算机图形学(一)

计算机图形学学习笔记&#xff08;一&#xff09; 什么是计算机图形学 计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。 什么是好的画面&#xff1f; 从技术层面简单的评判标准&#xff1a;直接看画面…