C++的std::vector

std::vector是C++标准库中的一个序列容器,它封装了动态大小数组的行为std::vector允许你在运行时动态地添加和删除元素,自动管理存储空间的分配和释放。由于其灵活性和易用性,std::vector在C++程序中被广泛使用,特别是在需要存储一系列元素时。

基本特性

  • 动态大小:std::vector的大小可以在运行时动态改变,不需要手动管理内存。
  • 连续存储:std::vector在内存中连续存储元素,这意味着你可以像使用数组一样使用指针或迭代器来遍历vector。
  • 随机访问:可以通过下标操作符[]直接访问std::vector中的任何元素,访问时间为常数时间复杂度(O(1))。

创建和初始化

#include <vector>std::vector<int> vec; // 创建一个空的int型vector
std::vector<int> vec2(10, 0); // 创建一个包含10个int型元素的vector,每个元素初始化为0
std::vector<int> vec3 = {1, 2, 3, 4, 5}; // 使用初始化列表创建并初始化vector

添加和删除元素

vec.push_back(10); // 在vec的末尾添加一个元素10
vec.pop_back(); // 删除vec末尾的元素

访问元素

int firstElement = vec[0]; // 访问第一个元素
int lastElement = vec.back(); // 访问最后一个元素

迭代器

std::vector提供了迭代器来遍历容器中的元素。

for(std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";
}
// 使用C++11范围for循环更简洁
for(auto& element : vec) {std::cout << element << " ";
}

容量和大小

  • size():返回std::vector中元素的个数。
  • capacity():返回std::vector在不重新分配内存的情况下能容纳的最大元素数。
  • resize(n):调整vector的大小为n,如果n大于当前大小,则添加默认构造的元素。
  • reserve(n):请求改变vector的容量至少为n,这可以减少多次添加元素时的重新分配次数。

例子1

#include <vector>
#include <iostream>int main() {std::vector<int> vec;vec.push_back(10); // 向vec添加一个元素10vec.push_back(20); // 再添加一个元素20// 打印vec的内容for(int num : vec) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

例子2:与opencv一起用

在使用OpenCV处理图像时,push_back也可以用于cv::Mat对象,这在需要收集图像或图像特征数据时特别有用。

添加新行到cv::Mat

如果你有一个cv::Mat矩阵,想要在其末尾添加一行,可以使用push_back。这在从图像序列中构建数据集等场景中非常有用:

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;int main() {// 创建一个空的Mat对象Mat mat;// 创建一个新的行向量Mat row = Mat::ones(1, 5, CV_32F); // 创建一个1x5的浮点型行向量,所有元素初始化为1// 将这行添加到mat中mat.push_back(row);// 再添加一个不同的行row = Mat::zeros(1, 5, CV_32F); // 创建一个1x5的浮点型行向量,所有元素初始化为0mat.push_back(row);std::cout << "mat = " << std::endl << mat << std::endl;return 0;
}

在这个例子中,mat最初是空的。我们首先添加了一个所有元素为1的行,然后添加了一个所有元素为0的行。最终,mat包含了两行。

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

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

相关文章

JavaScript中手动实现Array.prototype.map方法

在前端开发中&#xff0c;我们经常需要对数组进行操作和处理。在JavaScript中&#xff0c;数组是常用的数据类型之一。而数组的map方法可以将一个数组中的每个元素都进行某种操作&#xff0c;并返回一个新的数组。今天&#xff0c;我们就来手动实现JavaScript中数组原型的map方…

Spring Bean 的生命周期了解么?

Spring Bean 的生命周期基本流程 一个Spring的Bean从出生到销毁的全过程就是他的整个生命周期, 整个生命周期可以大致分为3个大的阶段 : 创建 使用 销毁 还可以分为5个小步骤 : 实例化(Bean的创建) , 初始化赋值, 注册Destruction回调 , Bean的正常使用 以及 Bean的销毁 …

c++基础回顾之引用

定义 与指针相似的是&#xff0c;引用将存储位于内存中其他位置的对象的地址。 与指针不同的是&#xff0c;初始化之后的引用无法引用不同的对象或设置为 null。 声明方式 # 引用、指针和对象可以一起声明 int &ref, *ptr, k;引用保留对象的地址&#xff0c;但语法行为与对…

​ 安达发|APS排程软件的动态合并优化详解

在制造业中&#xff0c;为了提高生产效率、降低成本并满足客户需求&#xff0c;企业需要采用先进的人工智能算法APS系统。APS&#xff08;高级计划与排程&#xff09;系统作为一种强大的工具&#xff0c;可以帮助企业实现这一目标。本文将详细介绍APS排程软件的动态合并优化功能…

从零开始手写mmo游戏从框架到爆炸(十五)— 命令行客户端改造

导航&#xff1a;从零开始手写mmo游戏从框架到爆炸&#xff08;零&#xff09;—— 导航-CSDN博客 到现在&#xff0c;我们切实需要一个客户端来完整的进行英雄选择&#xff0c;选择地图&#xff0c;打怪等等功能。所以我们需要把之前极为简陋的客户端改造一下。 首先…

Python系列(16)—— string类型转float类型

Python中String类型转Float类型 方法1&#xff1a;使用float()函数 Python内置了float()函数&#xff0c;它可以直接将字符串转换为浮点数。如果字符串不能转换为浮点数&#xff0c;该函数将引发ValueError异常。 # 示例代码 string_value "3.14159" try:float_v…

继续教育山东第一医科大学临床医学试题及答案,分享几个实用搜题和学习工具 #媒体#学习方法#微信

在追求知识的道路上&#xff0c;合理使用学习工具是我们必不可少的一环。 1.难试题 这是一个网站 是一家专注于学生、家长、教师等作业搜题查找答案的网站。里面有大量的2023作业题、作业答案、作业资料及2023作业详细讲解。每天都会更新很多作业题 2.灵兔搜题 这是个微信公…

Rabbitmq的几种模式的总结

RabbitMQ是一个开源的消息中间件&#xff0c;它实现了AMQP&#xff08;高级消息队列协议&#xff09;并提供了丰富的消息传输模式。下面是RabbitMQ的几种常见消息传输模式的总结&#xff1a; 简单模式&#xff08;Simple Mode&#xff09;&#xff1a;在简单模式下&#xff0c;…

力扣238和169

一&#xff1a;238. 除自身以外数组的乘积 1.1题目 1.2思路 1.3代码 //左右乘表 int* productExceptSelf(int* nums, int numsSize, int* returnSize) {int* answer (int*)malloc(numsSize*sizeof(int));int i 0;int left[numsSize],right[numsSize];left[0] 1;for(i 1;…

猫头虎分享已解决Bug || 脚本执行错误(Script Execution Failure):ScriptError, ExecutionFailure

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

IOT-Reaserch虚拟机配置

我用的是VirturalBox 主机与物理机之间的复制粘贴问题 VirtualBox Ubuntu无法安装增强功能以及无法复制粘贴踩坑记录_virtualbox安装增强功能没反应-CSDN博客 上面这篇博客帮助了我很多&#xff0c;摘取重要的重新提示一遍 运行虚拟机选择&#xff1a;设备->安装增强功能…

【字符串题目讲解】一文理解 Manacher Algoirth(马拉车算法)——以洛谷 P3805 和 P5446 为例

M a n a c h e r A l g o r i t h m \mathrm{Manacher\ Algorithm} Manacher Algorithm Manacher 算法主要是解决怎样的问题呢&#xff0c;其实是求解最长的回文串&#xff0c;但是只能找到长度为奇数的回文串&#xff0c;不过可以通过转化使得能够求解任意长度的回文串。 例…

使用智能电销机器人,拓客效果更佳!

现在很多的企业做销售都离不开电话营销&#xff0c;它是一种能够直接帮助企业获取更多利润的营销模式&#xff0c;目前被各大行业所采用。 znyx222 了解探讨 电话营销是一个压力很大的职业&#xff0c;新员工培养难度大、老员工又不好维护&#xff0c;会有情绪问题出现等&…

blasterswap明牌空投

空投要点 明牌空投&#xff0c;blaster生态第一个swap&#xff0c;应该不会寒酸交互简单&#xff0c;仅需3步&#xff0c;零gas费仅仅要求加密钱包在eth链有过交易需要有x和discord账号 blasterswap空投简介 BlasterSwap 是Blast生态里面第一个SWAP项目&#xff0c;近期启动…

git高级命令

取消上一次的commit命令&#xff1a; git reset --soft HEAD^ 查看提交记录&#xff1a; git log fq退出 回退指定的提交&#xff08;创建新的分支来回退&#xff09; git revert commit hash :wq退出 回退到指定的提交&#xff08;会修改你的分支历史&#xff09; git …

【嵌入式学习】QT-Day1-Qt基础

笔记 https://lingjun.life/wiki/EmbeddedNote/20QT 毛玻璃登录界面实现&#xff1a;

Fisher-Yates乱序算法

乱序算法 public class Test07 {public static void main(String[] args) {//乱序算法int[] arr {1,2,3,4,5,6,7,8};//逆序遍历 且这个随机的下标不能使要交换的元素的本身for(int i arr.length-1;i>0;i--){//产生一个随机的下标与当前元素进行交换int index (int)(Math…

智慧公厕管理系统:让城市智慧驿站更加智慧舒适

智慧公厕管理系统是城市智慧驿站中不可或缺的一部分&#xff0c;它通过全方位的信息化解决方案&#xff0c;为公共厕所的使用、运营和管理提供了一种智能化的方式。作为城市智慧驿站的重要组成部分&#xff0c;智慧公厕管理系统发挥着重要的作用&#xff0c;为城市社会民生提供…

记录 | git回退操作

修改了本地的代码&#xff0c;然后使用&#xff1a; git add file git commit -m 修改原因 执行commit后&#xff0c;还没执行push时&#xff0c;想要撤销这次的commit&#xff0c;该怎么办&#xff1f; 解决方案&#xff1a; 使用命令&#xff1a; git reset --soft HEAD^…

2024年华为OD机试真题-机器人仓库搬砖-Java-OD统一考试(C卷)

题目描述: 机器人搬砖,一共有N堆砖存放在N个不同的仓库中,第i堆砖中有bricks[i]块砖头,要求在8小时内搬完。机器人每小时能搬砖的数量取决于有多少能量格,机器人一个小时中只能在一个仓库中搬砖,机器人的能量格每小时补充一次且能量格只在这一个小时有效,为使得机器人损…