C++容器之vector

news2024/11/23 10:42:53

C++ vector容器

vector是可变数组。
容纳元素个数可以在运行期间变化。

std::vector 是 C++ 标准库中的动态数组容器,它提供了可变大小的数组功能,具有灵活性和多种强大的功能。

特点

  1. 动态大小: std::vector 可以根据需要动态增长或缩小,可以在运行时添加或删除元素,无需事先知道数组大小,容器内部会自动处理。

  2. 随时随机访问: std::vector 支持随机访问,可以使用下标运算符 [] 和 at() 方法访问元素。

  3. 内存管理: std::vector 会自动管理内存,当元素超出当前大小时,会自动分配更多的内存,并根据需要移动现有元素。

  4. 元素安全性: 使用 at() 方法时,如果访问索引超出范围,会抛出 std::out_of_range 异常,提供了一定程度的安全性。

  5. 迭代器支持: std::vector 提供迭代器支持,可以使用标准算法进行遍历和操作。

  6. 内存连续性: std::vector 内部实现为连续的内存块,使得在访问元素时比链表等其他容器更快。

第1/2段示例代码

// CMake_LeetCodeHot100.cpp: 定义应用程序的入口点。
//

#include "CMake_LeetCodeHot100.h"
#include <iostream>
#include <algorithm>
#include <vector>
#include <array>
#include <ctime>
#include <stdlib.h>
using namespace std;

#define ASIZE 100000

void test_vector() {
	cout << "\ntest_vector()...\n";

vector<string> v;
char buf[10];

clock_t timeStart = clock();

	for (long i = 0; i < ASIZE; ++i) {
		try {
			snprintf(buf,10,"%d",rand());
			v.push_back(string(buf));
		}
		catch (exception& p) {
			cout << "i=" << i << " " << p.what() << endl;
			abort();
		}
	}
	

clock_t endStart = clock();

	// 输出运行时间
	cout << "milli-seconds : " << (endStart - timeStart) << endl;
	// 输出数组元素个数
	cout << "vector.size():" << v.size() << endl;
	// 输出数组第一个元素
	cout << "vector.front():" << v.front() << endl;
	// 输出数组最后一个元素
	cout << "vector.back():" << v.back() << endl;
	// 输出数组首地址
	cout << "vector.data():" << v.data() << endl;
	// 输出数组当前总容量
	cout << "vector.capacity():" << v.capacity() << endl;
}


int main()
{
	test_vector();
	getchar();
	return 0;
}

在这里插入图片描述

第2/2段示例代码

// CMake_LeetCodeHot100.cpp: 定义应用程序的入口点。
//

#include "CMake_LeetCodeHot100.h"
#include <iostream>
#include <vector>
using namespace std;

int main()
{
	// 创建一个整数的 vector
	std::vector<int> vec;

	// 添加元素
	vec.push_back(1);
	vec.push_back(2);
	vec.push_back(3);

	// 输出元素
	std::cout << "Vector elements: ";
	for (const auto& element : vec) {
		std::cout << element << " ";
	}
	std::cout << std::endl;

	// 访问元素
	std::cout << "First element: " << vec[0] << std::endl;
	std::cout << "Second element: " << vec.at(1) << std::endl;

	// 移除最后一个元素
	vec.pop_back();

	// 原地清空全部元素
	vec.clear();

	// 添加新元素
	vec.push_back(10);
	vec.push_back(20);

	// 输出大小和容量
	std::cout << "Size: " << vec.size() << ", Capacity: " << vec.capacity() << std::endl;
	getchar();
	return 0;
}

在这里插入图片描述

注意事项

  1. 内存重新分配: 当 std::vector 的大小超过当前容量时,会分配一个新的更大的内存块,并将现有元素复制到新内存中。大量插入操作时会影响性能。

  2. 预留空间: 如果知道将要插入的元素数量,用 reserve() 方法来预先分配内存能减少重新分配次数。

    vec.reserve(100); // 预留空间
    
  3. 隐式拷贝: 在向 std::vector 添加元素时,可能会发生拷贝。在处理大型对象时,应考虑使用移动语义(C++11 及更高版本)。

  4. 线程安全: std::vector 不保证线程安全。若多线程同时访问或修改同一个 std::vector,需要使用同步机制。

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

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

相关文章

使用VuePress-Reco快速搭建博客(保姆级)

简介&#xff1a;VuePress-Reco 一款简洁的 vuepress 博客 & 文档 主题&#xff0c;可以自由搭建自己的风格&#xff0c;比较方便简洁。 链接&#xff1a;vuepress-reco 准备环境&#xff1a; Node.Js >20.5.0&#xff0c;Npm > 10.8.2 OR Yarn > 1.22.19 注&am…

数据库系统概论:数据库系统的锁机制

引言 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;数据作为一种共享资源&#xff0c;其并发访问的一致性和有效性是数据库必须解决的问题。锁机制通过对数据库中的数据对象&#xff08;如表、行等&#xff09;进行加锁&#xff0c;以确保在同…

数据结构-冒泡排序

1 概念 冒泡排序属于一种常见的交换排序&#xff0c;根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。具体操作是按顺序&#xff08;从前往后或从后往前&#xff09;两两对比元素直至本次排序结束&#xff0c;每次排序确认一个固定值&#xff08;末位或首…

windows USB 设备驱动开发-开发Type C接口的驱动程序(二)

编写 USB Type C 连接器驱动程序 在以下情况下&#xff0c;需要编写 USB Type-C 连接器驱动程序&#xff1a; 如果 USB Type-C 硬件能够处理电源输送 (PD) 状态机。 否则&#xff0c;请考虑编写 USB Type C 端口控制器驱动程序&#xff1b; 如果硬件没有嵌入式控制器。 否则&…

微信小程序 button样式设置为图片的方法

微信小程序 button样式设置为图片的方法 background-image background-size与background-repeat与border:none;是button必须的 <view style" position: relative;"><button class"customer-service-btn" style"background-image: url(./st…

[数据集][目标检测]拐杖检测数据集VOC+YOLO格式638张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;638 标注数量(xml文件个数)&#xff1a;638 标注数量(txt文件个数)&#xff1a;638 标注类别…

四个节点即可实现的ComfyUI批量抠图工作流

原文链接&#xff1a;ComfyUI面部修复完全指南 (chinaz.com) 下图就是批量抠图的工作流 虽然工作流很简单&#xff0c;但是我们前提还是需要安装好我们的节点 首先安装我们的抠图节点 安装 BiRefNet 所需依赖&#xff1a;timm&#xff0c;如已安装无需运行 requirements.txt…

【论文阅读】Mamba: Linear-Time Sequence Modeling with Selective State Spaces

Mamba: Linear-Time Sequence Modeling with Selective State Spaces 论文&#xff1a;[2312.00752] Mamba: Linear-Time Sequence Modeling with Selective State Spaces 作者&#xff1a;Albert Gu 和 Tri Dao&#xff0c;分别来自卡内基梅隆大学机器学习系和普林斯顿大学计…

ros笔记02--从零体验ros2中的服务通信方式

ros笔记02--从零体验ros2中的服务通信方式 介绍创建步骤注意事项说明 介绍 在ROS 2中&#xff0c;服务指的是远程过程调用&#xff0c;client调用server&#xff0c;server节点收到数据后计算出结果并返回给client. 服务通常期望能快速返回&#xff0c;因此不应当用于处理长时…

spark 动态资源分配dynamicAllocation

动态资源分配&#xff0c;主要是spark在运行中可以相对合理的分配资源。 初始申请的资源远超实际需要&#xff0c;减少executor初始申请的资源比实际需要少很多&#xff0c;增多executorSpark运行多个job&#xff0c;这些job所需资源有的多有的少&#xff0c;动态调整executor…

[数据集][目标检测]拐杖检测数据集VOC+YOLO格式2778张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2778 标注数量(xml文件个数)&#xff1a;2778 标注数量(txt文件个数)&#xff1a;2778 标注…

Ubuntu 22.04.4 LTS (linux) Tomcat 下载 安装配置详细教程

1 官网下载 下载链接 2 ubuntu 服务器安装 #下载 wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.91/bin/apache-tomcat-9.0.91.tar.gz #解压 tar zxvf apache-tomcat-9.0.91.tar.gz sudo mv apache-tomcat-9.0.91/ /data/tomcat #配置环境变量 sudo vi /etc/profil…

js 实现扫雷游戏,源码开放,支持npm引入使用

本人开发的js版本扫雷游戏 体验地址 | Github Minesweeper game Sponsors Install and use npm i minesweeper-gameimport {Map} from minesweeper-game;const map new Map();Reset Map map.reset();TS Statement interface IMapOptions {width?: number; // Map sizeh…

处理器小尾顺序和大尾顺序学习

小尾顺序和大尾顺序&#xff0c;这是指的存取内存数据的方案。 小尾顺序&#xff0c;little endian order&#xff1b;变量的最低有效字节存储在地址值最小的地址单元中&#xff0c;其余字节在内存中按顺序连续存储。 Intel处理器使用小尾顺序。 考虑双字12345678h在内存中的…

ip地址设置了重启又改变了怎么回事

在数字世界的浩瀚星海中&#xff0c;IP地址就如同每个设备的“身份证”&#xff0c;确保它们在网络中准确无误地定位与通信。然而&#xff0c;当我们精心为设备配置好IP地址后&#xff0c;却时常遭遇一个令人费解的现象&#xff1a;一旦设备重启&#xff0c;原本设定的IP地址竟…

IDEA的详细设置

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试&#xff08;Debug&#xff09; 第七章 …

0基础学python-19:快速上手爬虫

目录 前言 爬虫需谨慎&#xff0c;切勿从入门到入狱&#xff01; 一点小小的准备工作 直接上手爬取网页 1.获取UA伪装 2.获取url 3.发送请求 4.获取数据并保存 总结 前言 爬虫需谨慎&#xff0c;切勿从入门到入狱&#xff01; 一点小小的准备工作 对pip进行换源&#xf…

WordPress外贸建站案例

Vicuna维楚纳wordpress外贸主题 Vicuna维楚纳wordpress外贸主题&#xff0c;适合跨境电商产品展示的wordpress外贸建站模板。 https://www.jianzhanpress.com/?p7132 Der德尔wordpress建站主题 经典中国红红色wordpress主题&#xff0c;适合跨境电商产业园企业建站的wordpr…

如何定位Milvus性能瓶颈并优化

假设您拥有一台强大的计算机系统或一个应用&#xff0c;用于快速执行各种任务。但是&#xff0c;系统中有一个组件的速度跟不上其他部分&#xff0c;这个性能不佳的组件拉低了系统的整体性能&#xff0c;成为了整个系统的瓶颈。在软件领域中&#xff0c;瓶颈是指整个路径中吞吐…

开机出现grub无法进入系统_电脑开机出现grub解决方法

最近有小伙伴问我电脑开机出现grub无法进入系统怎么回事&#xff1f;电脑开机出grub的情况有很多&#xff0c;电脑上安装了Linux和Win10双系统&#xff0c;但是由于格式化删除了Linux之后&#xff0c;结果win10开机了之后&#xff0c;直接显示grub&#xff1e;&#xff0c;无法…