【C++】——vector

news2024/11/25 9:46:19

文章目录

  • vector介绍
  • vector的使用
  • vector的构造
  • vector迭代器
  • vector空间增减
  • vector增删查改

vector介绍

  1. vector是一个动态数组,可以根据需求变大变小
  2. vector支持随机访问
  3. vector会自动管理内存分配和释放
  4. vector在尾部添加和删除的效率非常高,中间和头部插入较慢,因为内存是连续的,除了尾部的增删以外都需要挪动被处理数据之后的全部数据

vector的使用

vector的存在形式
在这里插入图片描述
vector的接口
在这里插入图片描述

vector的构造

vecotr的常用构造大致有一下几种

#define   _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <vector>
using namespace std;

void test_vector1()
{
	vector<int>(); // 匿名对象会在这段代码执行结束完毕后销毁,即;之前
	vector<int> v0 = { 10,9,8,7,6 }; // 初始化列表构造
	vector<int> v1; // 无参构造
	vector<int> v2(10, 0); // 构造一个10个大小且全部初始化为0的vector
	vector<int> v3(v2); // 拷贝构造
	vector<int> v4(v2.begin(), v2.end()); // 范围构造
	
	int arr[] = { 1,2,3,4,5 };
	vector<int> v5(arr, arr + sizeof(arr) / sizeof(int)); // 用原生指针或者库里的begin(),end()都可以,对于标准库不熟悉的话可以这么写

	for (vector<int>::iterator it = v5.begin(); it < v5.end(); ++it)
	{
		cout << *it << " ";
	}

	cout << endl;

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

vector迭代器

在这里插入图片描述

void test_vector2()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

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

	// 反向迭代器遍历
	vector<int>::reverse_iterator rt = v.rbegin(); // 指向最后一个指针
	while (rt != v.rend()) // 指向第一个指针
	{
		cout << *rt << " "; // 这里的++是倒着走
		++rt;
	}
	cout << endl;

	// 范围for遍历
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;

}

vector空间增减

在这里插入图片描述

  1. vecotr在不同环境下的扩容倍数不同,一般是1.5到2倍
  2. reserve只改变capacity,不改变size
  3. resize改变size,不一定改变capacity,如果当前capacity大于等于szie,则不改变,如果小于,capacity会至少增大到能够容下size(如果新的大小远低于当前capacity,vector可能会选择减小其capacity以节省内存)
void test_vector3()
{
	vector<int> v1(10);
	v1.reserve(100); 
	cout << "v1.size = " << v1.size() << " "  <<"v1.capacity = " << v1.capacity() << endl;

	vector<int> v2(v1);
	v2.resize(50);
	cout << "v2.size = " << v2.size() << " " << "v2.capacity = " << v2.capacity() << endl;
	v2.resize(5);
	cout << "v2.size = " << v2.size() << " " << "v2.capacity = " << v2.capacity() << endl;
	
}

在这里插入图片描述

vector增删查改

在这里插入图片描述

void test_vector4()
{
	vector<int> v1;
	//增: push_back(尾插)
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);
	v1.push_back(4);
	cout << "增:";
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;

	//删: pop_back(尾删)
	v1.pop_back();
	cout << "删:";
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;

	//查: find(这个是算法库中的接口,不是vector的接口,返回类型是查找位置的迭代器)
	auto pos1 = find(v1.begin(), v1.end(), 2);
	cout << "查:";
	cout << *pos1 << endl;    //如果没找到就不进行任何操作

	//在任意位置插入: insert
	//要先用find找到要插入的位置,然后再插入数据
	auto pos2 = find(v1.begin(), v1.end(), 2);
	if (pos2 != v1.end())
	{
		v1.insert(pos2, 20);
	}
	cout << "插入任意位置:";
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;

	//在任意位置删除: erase
	//同样要先用find找到要删除的位置,然后再删除数据
	auto pos3 = find(v1.begin(), v1.end(), 2);
	v1.erase(pos3);
	cout << "删除任意位置:";
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;

	//改: operator[]
	v1[0] = 100;
	cout << "改:";
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;
	
}

在这里插入图片描述

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

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

相关文章

reader-lm:小模型 html转markdown

参考&#xff1a; https://huggingface.co/jinaai/reader-lm-0.5b 在线demo&#xff1a; https://colab.research.google.com/drive/1wXWyj5hOxEHY6WeHbOwEzYAC0WB1I5uA#scrollTo0mG9ISzHOuKK 输入网址&#xff1a;https://www.galaxy-geely.com/E5 结果&#xff1a; 代码…

搭建ipv6并发代理池

声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 学习目标 ipv6代理池学习…

UI自动化测试痛点解决方案

前言 UI自动化测试可以快速、准确地执行大量的测试用例&#xff0c;减少人工测试所需的时间和劳动力。能够在短时间内完成多个测试用例的执行&#xff0c;提高测试的效率和速度。但是UI自动化有个最大的痛点。当前端界面发生变化时&#xff0c;往往页面元素定位也会改变&#…

ultralytics实现DeepSort之级联匹配

前面博客中说过&#xff0c;通过Market-1501数据集的训练后可以得到特征提取模型&#xff0c;这个模型最终的输出值为&#xff08;bs&#xff0c;num_class&#xff09;,但在DeepSort算法应用中的输出结果并非如此&#xff0c;其输出的是特征信息。 特征提取 通过训练后的特征…

通信工程学习:什么是PDF策略决策功能

PDF策略决策功能 PDF策略决策功能&#xff08;Policy Decision Function, PDF&#xff09;在通信网络中&#xff0c;特别是在IP多媒体子系统&#xff08;IMS&#xff09;中&#xff0c;扮演着至关重要的角色。以下是对PDF策略决策功能的详细解释&#xff1a; 一、定义与功能概…

C语言——课设万能模板、实战项目——学生信息管理系统

本人无偿奉献学生管理系统的所有代码&#xff0c;包括.h头文件和.c文件&#xff0c;要源码私信&#xff0c;或者评论&#xff0c;希望点个关注。可以完整运行。 介绍一下这个系统&#xff0c;该系统包括八个功能&#xff1a; printf("1.录入学生信息\n"); print…

软考中级软件设计师-【计算机系统】必考题汇总

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持…

中原地产:人力资源数字化创新实践分享

近日&#xff0c;法大大与人力资源智享会&#xff08;以下简称“智享会”&#xff09;联合发布了《第七届人力资源共享服务中心研究报告》&#xff08;点击阅读及下载&#xff1a;最新&#xff01;《第七届人力资源共享服务中心研究报告》重磅来袭&#xff09;&#xff0c;该报…

2024【华为战报】8月HCIP考试战报!

了解更多往期考试→点 【考试战报】 华为认证 HCIP 8月 微思 | HCIP 考试战报 HCIP 最新开班 厦门面授 全国直播 每月循环开班 点击查看【华为认证 HCIP】 END 微思网络&#xff0c;始于2002年 专业IT认证培训22年&#xff0c;面向全国招生&#xff01; 微思-主要课程有&a…

【App】

1. 移动App的开发模式 原生开发 - 原生App > Android、IOS、Windows混合开发 - 混合App > React Native、Weex、Flutter React Native 是基于 React 语法开发的一个混合开发框架Weex 是基于 Vue 语法开发的一个混合开发框架Flutter 是 Google 推出来的一款混合开发框架比…

AI大模型全栈工程师课程笔记 - RAG 检索增强生成

文章目录 \1. RAG\2. 构建流程 2.1 文档加载与切分2.2 传统检索引擎2.3 LLM接口封装2.4 构建prompt \3. 向量检索\4. 向量数据库\5. 基于向量检索的RAG\6. 进阶知识 6.1 文本分割粒度6.2 检索后再排序6.3 测试 1. RAG RAG&#xff08;Retrieval Augmented Generation&#…

计算机网络 --- 计算机网络的分类

一、计算机网络分类 1.1 按分布范围分类 举例&#xff1a;广域网&#xff08;WAN&#xff09;、局域网&#xff08;LAN&#xff09; 举例&#xff1a;个域网&#xff08;PAN&#xff09; 1.2 按传输技术分类 广播式网络――当一台计算机发送数据分组时&#xff0c;广播范围…

xmake与包管理:又一个现代c++构建工具?

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 主要起因是我在逛Reddit帖子时,看到关于一些c构建系统的评价. cmake似乎有些过于复杂,它与vcpkg,conan的包管理之间的"融合"可能在有些时候也显得麻烦. 一些人尝试了我没见过的选项, 所以这里主要试试除了…

推荐一款开源的API开放平台,5分钟就可以搭建企业专属的API开放门户!

在过去的十年中&#xff0c;企业API治理并未受到广泛关注。然而&#xff0c;随着时间的推进&#xff0c;特别是在近几年&#xff0c;企业技术管理者对API治理的重视程度显著提高&#xff0c;开始将API视为企业资产的重要组成部分。API不再仅仅是技术层面的概念&#xff0c;而是…

场外期权合法吗?

今天期权懂带你了解场外期权合法吗&#xff1f;场外期权是指在场外市场进行交易的期权合约&#xff0c;而非在标准化交易所进行交易。这些期权合约通常由交易双方直接协商具体条款&#xff0c;包括到期时间、行权价格和标的资产等。 场外期权主要特点 1.定制化&#xff1a;OT…

一种多态的实现方法

通过 Activator.CreateInstance 以及 继承关系实现 public interface Name{String GetName();}public class Join : Name{public string GetName(){return "Join";}}public class Thomas : Name{public string GetName(){return "Thomas";}}public class …

MongoDB的Map-Reduce操作与聚合管道操作的两个实例相互转换

一、插入集合 comment 的文档的内容 二、题目要求 将集合 comment 中的文档进行聚合操作&#xff0c;即将字段 state为1的文档查询出来&#xff0c;然后按字段 nickname 进行分组,最后计算出每个评论者的评论条数。 三、mapReduce 操作代码 db.comment.mapReduce(// Map函数&…

机器学习(西瓜书)第 7 章 贝叶斯分类器

7.1 贝叶斯决策论 贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方 法.对分类任务来说,在所有相关概率都已知的理想情形下&#xff0c;贝叶斯决策论考虑 如何基于这些概率和误判损失来选择最优的类别标记.下面我们以多分类任务 为例来解释其基本原理. 贝…

9月12号作业

主要更改的代码 void Widget::read_solt() { QByteArray msg socket->readAll();//接受信息 if(QString::fromLocal8Bit(msg)msg2||msg3QString::fromLocal8Bit(msg)||msg6QString::fromLocal8Bit(msg)) { QListWidgetItem *listItem new QListWidgetItem(QString::fromL…

策略抉择:左右为难,交易方向要如何破局?

交易决策的核心往往围绕着一个关键问题&#xff1a;是采取左侧交易策略还是右侧交易策略&#xff1f;左侧交易&#xff0c;亦称逆向交易&#xff0c;与右侧交易&#xff08;顺势交易&#xff09;形成鲜明对比&#xff0c;两者路径迥异&#xff0c;所以让很多交易员不知道该如何…