C++ vector的使用

C++里的vector详细讲解 vector是C++ STL中非常强大且易于使用的动态数组容器。它提供了灵活的内存管理、高效的元素访问和丰富的操作函数。然而,在使用vector时,我们也应该注意其性能特点和最佳实践,以确保代码的高效运行。通过合理使用vector的成员函数和注意避免一些常见陷阱,我们可以充分利用这个容器的优势来编写高效且可靠的C++代码。 阅读详情
AI摘要

本文介绍了C++中vector类模板,它类似顺序表,可存放不同类型数据。详细阐述了vector的构造、析构和赋值操作,还介绍了迭代器、容量、元素获取及修改等内容,如尾插尾删、insert插入、erase删除等操作。

###vector介绍:

vector是C++中引入的类模板,这个模板相当于顺序表,里面可以存放不同类型的数据,同时实现了多个接口去完成对vector对象的各种操作;

基本使用方式:

#include<vector>//包含头文件

using namespace std;//展开头文件中的命名空间

int main()

{

        vector<int> v;//定义一个vector对象,这个对象存放的是int类型的数据;

}

一、vector的构造、析构和赋值

1、构造

  • 不传参数构造,这个vector中没有数据;

  • 第一个参数为数据个数,第二个参数为数据值,完成构造;

  • 用已存在的vector去构造另一个vector;

  • 用已存在的vector的一部分去初始化;

  • 用数组去初始化(两个参数都是指向数组元素的指针,指针之间包含的数据就是要去初始华的数据)。 
void test01()
{
	//不初始化,v1里面没有数据
	vector<int> v1;
	cout << "data:";
	for (auto i : v1)
	{
		cout << i << ' ';
	}
	cout << endl;

	//用10个1初始化
	vector<int> v2(10, 1);
	cout << "data:";
	for (auto i : v2)
	{
		cout << i << ' ';
	}
	cout << endl;
	//用vector去初始化vector
	vector<int> v3(v2);
	cout << "data:";
	for (auto i : v3)
	{
		cout << i << ' ';
	}
	cout << endl;

	//用vector对象的一部分去初始化(使用迭代器)
	vector<int> v4(v3.begin() + 1, v3.end() - 1);
	cout << "data:";
	for (auto i : v4)
	{
		cout << i << ' ';
	}
	cout << endl;

	//用数组初始化
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	//可以理解为地址的范围中含有的数据
	vector<int> v5(arr, arr+sizeof(arr) / sizeof(arr[0]));
	cout << "data:";
	for (auto i : v5)
	{
		cout << i << ' ';
	}
	cout << endl;
}

2、析构

清除所有的元素,并且把vector对象申请的空间释放

3、赋值

将一个vector对象的元素个数,数据值,容量大小赋值给另一个对象,但是两个vector对象的地址不变

二 、迭代器

 与string的迭代器类似

void test02()
{
	vector<int> v1(10,9);
	vector<int>::iterator it = v1.begin();
	while (it != v1.end())
	{
		(*it)++;
		cout << *it << " ";
		it++;
	}
	cout << endl;
	vector<int>::const_iterator cit = v1.cbegin();//cit指向的数据不能被改变
	while (cit != v1.cend())
	{
		cout << *cit << " ";
		cit++;
	}
}

 三、容量:

	vector<int> v1(10, 1);
	//size
	cout << v1.size() << endl;
	//capacity
	cout << v1.capacity() << endl;
	//empty
	cout << v1.empty() << endl;

不为空,empty返回假,0代表假;

reserve在VS里面默认只会扩大,当要reserve的值比vector对象的容量小时,不改变capacity

	//reserve
	vector<int> v2(10, 9);
	v2.reserve(20);
	cout << v2.size() << endl;
	cout << v2.capacity() << endl;
	v2.reserve(5);
	cout << v2.size() << endl;
	cout << v2.capacity() << endl;
	v2.reserve(30);
	cout << v2.size() << endl;
	cout << v2.capacity() << endl;

 resize 改变对象size的值;缩小就相当于从尾部删除数据,增大就从尾部加数据,这些加的数据可以给特定的值:

	//resize
	vector<int> v3(10, 1);
	cout << v3.size() << endl;
	cout << v3.capacity() << endl;
	for (auto i : v3)
	{
		cout << i << " ";
	}
	cout << endl;

	v3.resize(5);
	cout << v3.size() << endl;
	cout << v3.capacity() << endl;
	for (auto i : v3)
	{
		cout << i << " ";
	}
	cout << endl;

	v3.resize(20,9);
	cout << v3.size() << endl;
	cout << v3.capacity() << endl;
	for (auto i : v3)
	{
		cout << i << " ";
	}
	cout << endl;

当resize扩大size时,不给特定的值,就默认为0。

四、元素获取

void test04()
{
	vector<int> v1(10, 1);
	//通过下标访问数据//[]
	for (size_t i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << ' ';
	}
	cout << endl;

	//at
	for (size_t i = 0; i < v1.size(); i++)
	{
		cout <<v1.at(i)<< ' ';
	}
	cout << endl;

	//front back分别获取第一个个最后一个的数据
	vector<int> v2(10);
	v2[0] = 100;
	v2[v2.size()-1] = 999;
	cout << v2.front() << endl;
	cout << v2.back() << endl;

	//data获取vector对象的地址
	vector<int> v3(10, 9);
	int* p = v3.data();//此时p是v3首个数据的地址
	*p = 100;
	p++;//第二个数据地址
	*p = 200;
	p[2] = 400;//p从第二个数据的地址往后加2,就是原数据的第四个数据的地址
	for (size_t i = 0; i < v3.size(); i++)
	{
		cout << v3[i] << ' ';
	}
}

 

五、修改

尾插和尾删

	//push_back、pop_back
	//尾插和尾删
	vector<int> v1(10, 10);
	v1.push_back(999);
	v1.push_back(888);
	v1.pop_back();
	for (auto i : v1)
	{
		cout << i << " ";
	}
	cout << endl;

insert插入数据,vector里面涉及的insert相比于string更加简洁;这里的position都是迭代器操作的

  1. 在position位置之前插入数据val;
  2. 在position位置之前插入n个val数据;
  3. 在一个vector对象的position位置之前插入另一个vector对象的一段迭代器区间中的数据;

 

	//insert
	vector<int> v1(10, 10);
	v1.insert(v1.begin()+6, 999);
	for (auto i : v1)
	{
		cout << i << " ";
	}
	cout << endl;

	v1.insert(v1.begin(), 3, 888);
	for (auto i : v1)
	{
		cout << i << " ";
	}
	cout << endl;

	vector<int> v2(10, 6);
	v1.insert(v1.begin(), v2.begin() + 5, v2.end());
	for (auto i : v1)
	{
		cout << i << " ";
	}
	cout << endl;

erase删除一个或者一段数据,通过迭代器实现

	//erase
	vector<int> v1(10);
	for (size_t i = 0; i < v1.size(); i++)
	{
		v1[i] = i;
	}
	for (auto i : v1)
{
	cout << i << " ";
}
	cout << endl;
	//删除一个数据
	v1.erase(v1.begin());
	for (auto i : v1)
{
	cout << i << " ";
}
	cout << endl;
	//删除一段数据
	v1.erase(v1.begin(), v1.end() - 5);
	for (auto i : v1)
{
	cout << i << " ";
}

 

C++ vector库的用法 本文将分4点介绍C++ vector库的用法 vector的初始化 vector对象的操作 2.1 vector迭代器 vector整体操作 vector查找 1. vector的初始化赋值 头文件:#include < vector> 类型: vector<int/char/string/基本数据类型/自定义类型/结构体类型/…>vec ; (1)vector<int> a(10); //定义了10个整型元素的向量,初值为0 (2)vector<int> 阅读详情

相关推荐

恶补Cpp系列——标准vector类型

从今天开始每个工作日将会推出一个“恶补Cpp系列”专题。由于现在楼猪我个人的原因需要恶补c++编程,俗称少壮不努力老大徒伤悲啊。。。这专题是我的一个复习笔记,希望放到博客上能帮到需要使用c++的大家,特别是初学者和准备找工作的同学。   1 vector概述 vector是C++标准程序库中的一个类,可视为会自动扩展容量的数组,以循序(Sequential)的方式维护变量集合。 vecto

小太陽的专栏 1802

C语言vector的使用方法 C++中vector的用法详解

vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 为了可以使用vector,必须在你的头文件中包含下面的代码: #include vector属于std命名域的,因此需要通过命名限

My博客 7万+

使用C#的向量(Vector)的用法

本文介绍了在C#中使用向量的基本用法,包括创建向量、向量运算和向量化循环。向量可以提高代码的执行效率,并简化对一组数据的操作。通过合理地使用向量,可以优化代码的性能,特别是在处理大量数据时。向量(Vector)是C#中一个常用的数据结构,用于存储和操作一组相同类型的元素。在本文中,我们将详细介绍C#中向量的用法,并提供相应的源代码示例。在上述示例中,我们将数组的每个元素与向量的每个元素进行逐个相加,并将结果存回数组中。

Meta_C的博客 1724

C++中的vector的详细用法

c++的vector用法

weixin_63246738的博客 2万+

cpp中vector的使用

C++中vector的两种访问方式v[]和v.at()都能访问元素且都不能越界,但存在重要区别:v[]不进行边界检查,越界时返回错误引用可能导致程序崩溃;v.at()会进行边界检查,越界时抛出异常,可通过try-catch捕获使程序继续运行。实际使用中v[]更常见但风险较高,v.at()更安全但性能稍低。

youzjuer的博客 174

C++vector的使用总结及常用vector操作

C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分,使用时需包含头文件: #include C++ vector类有两种使用方式: 第一种:STL方式 vector text; 1. 我们向 vector 中插入元素,而不再是索引元素,以及向元素赋值,例如 push_back()操作,就是在 vector 的后

程序猿老樊的博客 13万+

C++中b.cpp访问a.cpp中的vector<struct>变量 全局vector变量

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

koko的博客 1760

Android P HAL层添加HIDL实例(详细实现步骤)

Android P HAL层添加HIDL实例 本文将介绍如何在P OS上添加HIDL实例,简单增加seLinux策略使得可以在system_service调用测试,并用模拟器emulator验证。 调用过程为 APP->TestManager->TestService->ITast.hal 文章目录Android P HAL层添加HIDL实例实现过程一 、hardware部分1...

sinat_18179367的博客 1万+

【C++游记】Vector的使用和模拟实现

构造函数声明接口说明vector()无参数构造构造并初始化n个val拷贝构造使用迭代器进行初始化构造今日C++到这里就结束啦,如果觉得文章还不错的话,可以三连支持一下。感兴趣的宝子们欢迎持续订阅小枫の主页还有更多生动有趣的文章,欢迎宝子们去点评鸭~C++的学习很陡,时而巨难时而巨简单,希望宝子们和小枫一起坚持下去​。

枫の大一分享 1839

Unity 调用安卓内部安装apk

一、申请权限 应用内安装其他应用的权限属于特殊权限,需要在特殊申请。 Uri packageURI = Uri.parse("package:" + mContext.getPackageName()); Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI); startA...

BDDNH的博客 1240

避坑指南:MTK平台Widevine L1密钥安装全流程详解(含SP META工具使用与Log分析)

本文详细解析了MTK平台实现Widevine L1认证的全流程,涵盖密钥申请、格式转换、安全烧录等关键步骤,特别针对Trustonic TEE环境下的SP META工具使用与日志分析提供实用指南。帮助开发者规避常见错误,确保DRM密钥安全部署,满足高端内容保护需求。

weixin_27219587的博客 476

【C++】vector模拟实现的测试

对我们模拟实现的vector进行测试,然后利用vector相关知识解决问题

s_little_monster的博客 9480

EMQX 结合MySQL实现精细化ACL权限管理实战

本文详细介绍了如何通过EMQX结合MySQL实现精细化的ACL权限管理,提升物联网设备接入和消息传输的安全性。内容包括环境准备、基础配置、权限规则设计技巧以及高级应用与性能优化方案,帮助开发者快速掌握动态生效、便于管理的权限控制方法。

weixin_28683689的博客 197

cpp中的vector

c语言中的顺序表也就是cpp中的vector,但vector用指针的方式存储数据,同时vector中可以同时存储多个自定义类型例如:vector或者vector来书写对象,现在我将带你了解基本的底层实现。

m0_74202684的博客 610

WRF后处理:python cartopy绘制土地利用/土地分类图//python绘制WRF下垫面类型(以北极为例)

下垫面类型对于WRF的地表过程十分重要,而在我们研究WRF的地表过程之前,需要对输入的土地利用类型进行一些绘制,以便后续的修改。LU_MODIS21函数定义了绘制的土地类型、标签与对应色标,我们使用时,直接引用LU_MODIS21()即可返回。其实很简单,只要将你拥有的土地类型数据提取出来,将原本函数中的labels和C切片,重新定义色标再绘制即可。在这里,我将以北极地区为例,绘制北极地区的WRF下垫面数据,我使用的MODIS21这类。

weixin_43750300的博客 3859

AD2428与SigmaStudio:从节点自动配置与EEPROM存储实战

本文详细介绍了AD2428 A2B收发器与SigmaStudio开发环境的集成应用,重点讲解从节点自动配置与EEPROM存储的实战流程。通过硬件连接、属性配置、数据导出及嵌入式系统集成等步骤,实现设备上电自启动,提升汽车音频系统的可靠性与部署效率。

g8f9d0s1a2的博客 650

C++ vector的使用总结及常用vector操作

一、介绍 C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分,使用时需包含头文件: #include <vector> 二、使用方式 C++ vector类有两种使用方式: 第一种:STL方式 vector< string > text; 1. 我们向 vector 中插入元素,而不...

学之知之的博客 7348

手把手保姆级|Python爬取微信公众号文章完整版,反反爬策略拉满,附可运行完整代码(永久可用)

做Python爬虫的朋友都知道,爬取微信公众号文章 绝对是爬虫领域的「香饽饽」也是「硬骨头」。一方面,微信公众号的文章是极具价值的数据源:不管是自媒体从业者做竞品分析、新媒体运营者整理干货、还是个人学习收集资料,都需要批量爬取公众号文章;另一方面,微信的反爬机制堪称全网最严苛之一 ——腾讯对微信生态的风控做到了极致,动态渲染页面、高频IP封禁、Cookie短时效失效、请求头严格校验、自动化工具秒识别、频繁请求直接拉黑,这些反爬手段让90%的爬虫新手望而却步:要么爬了几篇就被封IP,要么Cookie失效爬取中

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2628

cpp的vector类

本篇将讲述类中的各种重要和常用函数(begin()、end()、rbegin()、rend()cbegin()、cend() 、crbegin()、crend()、size()、resize()、capacity()、reserve()、empty()、push_back ()、pop_back()、insert()、erase()、clear()。

2401_84018574的博客 1625

Python实现PDB文件预处理

蛋白质结构研究依赖PDB文件存储的三维结构数据,但原始文件常含无关的水分子、离子和非标准残基等干扰信息。本文介绍了一个基于BioPython的Python预处理脚本,可自动清理PDB文件,主要功能包括:1)移除短于阈值的蛋白质链;2)过滤非标准氨基酸;3)可选保留水分子和金属离子。该脚本逻辑清晰,支持批量处理,能显著提升结构比对、分子对接等分析前的数据准备效率,为后续生物信息学研究提供更纯净的结构数据基础。

Protein Designer的博客 568

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++的vector的使用

本文为学习C++的阅读、学习笔记,如有错漏请联系作者。 1. 基本概念 vector是一个类模板,在C++中使用模板可以编写一个类定义或函数定义,而用于多种不同的数据类型。vector是同一种类型的对象的集合,由于可以包含其他对象的特性,所以也将vector称为容器。 2. 使用方法 要使用vector类模板,需要添加头文件,并使用using声明: #include <vector> using std::vector; 关于使用using声明,避免在...

qq_38609565的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

c++实现Vector

//Vector.h extern const double uZero; class Vector3 { float x, y, z; public: Vector3() { x = 0; y = 0; z = 0; }; Vector3(float x1, float y1, float z1) { x = x1, y = y1, z = z1; } Vector3 operato...

piyixia的博客 456

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[cpp] Vector

vector是一种类模板,它表示对象的集合。

happily code 481

C++实现vector类

C++实现建议Vector类

qq_21593933的博客 705

Cpp進階:Vector 向量

Cpp 進階:Vector 向量 文章目錄Cpp 進階:Vector 向量簡介參考正文Overview 總覽Printer 輔助函數Declaration 變量聲明構造函數語法Access 訪問元素(查、改)訪問元素(查、改)相關語法Insert & Erase 增刪元素(增、刪)增刪元素(增、刪)相關語法Capacity 容量容量相關語法Iterator 迭代獲取迭代器語法結語 Cpp 進階:Vector 向量 簡介 參考 正文 Overview 總覽 Printer 輔助函數

超悠閒的博客 705

cpp vector

vector 动态空间,内部机制会自动扩充空间 维护一个线性、连续的内存空间 vector的数据结构:三个指针[iteratorHead, iteratorElementTail, iteratorTail] iteratorHead 指向当前空间的首地址 iteratorElementTail 指向当前空间最后一个元素的地址 iteratorTail 指向当前空间的结束地址 如,vector = {1,2,3,4,5,6} 如果先开辟4个空间那么第二次double开辟了8空间 因而 itera

qq_50726065的博客 1412
上一篇: C++string模拟实现
下一篇: C++-list使用学习
溪苏.
博客等级 码龄3年 995粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值