当前位置: 首页 > news >正文

c++学习第十三天

创作过程中难免有不足,若您发现本文内容有误,恳请不吝赐教。


提示:以下是本篇文章正文内容,下面案例可供参考

一、vector

   1.介绍

1. vector是表示可变大小数组的序列容器。
2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。
3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。
4. vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。
5. 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。
6. 与其它动态序列容器相比(deque, list and forward_list), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起listforward_list统一的迭代器和引用更好。

    2.构造和遍历

#include<iostream>
#include<vector>
using namespace std;int main()
{//构造vector<int> v1;vector<int> v2(10, 1);vector<int> v3(v2.begin(), v2.end());string str = "hello";vector<int> v4(str.begin(), str.end());vector<int> v5(v4);//遍历for (size_t i = 0; i < v3.size(); i++)cout << v3[i] << " ";cout << endl;vector<int>::iterator it = v4.begin();while (it != v4.end()){cout << *it << " ";it++;}cout << endl;for (auto e : v5)cout << e << " ";cout << endl;return 0;
}


    3. 测试vector的默认扩容机制

#include<iostream>
#include<vector>
using namespace std;int main()
{size_t sz;vector<int> v;sz = v.capacity();cout << "making v grow:\n";for (int i = 0; i < 100; ++i){v.push_back(i);if (sz != v.capacity()){sz = v.capacity();cout << "capacity changed: " << sz << '\n';}}return 0;
}

vs下使用的STL基本是按照1.5倍方式扩容     


    4.reserve 、resize

#include<iostream>
#include<vector>
using namespace std;int main()
{vector<int> v;//v.reserve(100);  // size = 0    capacity 100v.resize(100);     // size = 100  capacity 100for (size_t i = 0; i < 100; i++){v[i] = i;}for (auto e : v){cout << e << " ";}cout << endl;return 0;
}

    5.push_back 、insert 、find 、erase

#include<iostream>
#include<vector>
using namespace std;int main()
{vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);for (auto e : v){cout << e << " ";}cout << endl;v.insert(v.begin(), 0);for (auto e : v){cout << e << " ";}cout << endl;auto it = find(v.begin(), v.end(), 3);if (it != v.end()){v.insert(it, 30);}for (auto e : v){cout << e << " ";}cout << endl;it = find(v.begin(), v.end(), 3);if (it != v.end()){v.erase(it);}for (auto e : v){cout << e << " ";}cout << endl;return 0;
}


    6.size 、capacity

#include<iostream>
#include<vector>
using namespace std;int main()
{vector<int> v(6,8);cout << v.size() << endl;cout << v.capacity() << endl;v.clear();cout << v.size() << endl;cout << v.capacity() << endl;v.shrink_to_fit();cout << v.size() << endl;cout << v.capacity() << endl;return 0;
}


二、题目

    1.第一题

//力扣的格式
class Solution {
public:int singleNumber(vector<int>& nums) {int val = 0;for(auto e : nums){val ^= e;}return val;}
};

    2.第二题

//力扣的格式
class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> vv;vv.resize(numRows);for(size_t i = 0;i<vv.size();i++){vv[i].resize(i+1,0);vv[i][0]=vv[i][vv[i].size()-1]=1;}for(size_t i = 0;i<vv.size();i++)for(size_t j = 0;j<vv[i].size();j++)if(vv[i][j]==0)vv[i][j]=vv[i-1][j]+vv[i-1][j-1];return vv;}
};

总结

        以上就是今天要讲的内容,本文仅仅简单介绍了c++的基础知识。

相关文章:

c++学习第十三天

创作过程中难免有不足&#xff0c;若您发现本文内容有误&#xff0c;恳请不吝赐教。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、vector 1.介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样&#xff0c;vector也采用的连续存储空…...

zookeeper-3.8.3-基于ACL的访问控制

ZooKeeper基于ACL的访问控制 ZooKeeper 用ACL控制对znode的访问&#xff0c;类似UNIX文件权限&#xff0c;但无znode所有者概念&#xff0c;ACL指定ID及对应权限&#xff0c;且仅作用于特定znode&#xff0c;不递归。 ZooKeeper支持可插拔认证方案&#xff0c;ID格式为scheme…...

Java定时任务实现方案(四)——Spring Task

Spring Task 这篇笔记&#xff0c;我们要来介绍实现Java定时任务的第四个方案&#xff0c;使用Spring Task&#xff0c;以及该方案的优点和缺点。 ​ Spring Task是Spring框架提供的一个轻量级任务调度框架&#xff0c;用于简化任务调度的开放&#xff0c;通过注解或XML配置的…...

WGCLOUD运维工具从入门到精通 - 如何设置主题背景

需要升级到WGCLOUD的v3.5.7或者以上版本&#xff0c;才会支持自定义设置主题背景色 WGCLOUD下载&#xff1a;www.wgstart.com 我们登录后&#xff0c;在右上角点击如下的小图标&#xff0c;就可以设置主题背景色了&#xff0c;包括&#xff1a;经典白&#xff08;默认&#x…...

Babylon.js 中的 setHardwareScalingLevel和getHardwareScalingLevel:作用与配合修改内容

在 Babylon.js 中&#xff0c;Engine类提供了setHardwareScalingLevel和getHardwareScalingLevel方法&#xff0c;用于管理和调整渲染分辨率与屏幕分辨率的比例。这些方法在优化性能和提升画质方面非常有用。尤其是在某些平台不支持硬件反锯齿时&#xff0c;可以考虑使用setHar…...

Qwen2-VL:在任何分辨率下增强视觉语言模型对世界的感知 (大型视觉模型 核心技术 分享)

摘要 我们推出了Qwen2-VL系列,这是对之前Qwen-VL模型的高级升级,重新定义了视觉处理中的常规预设分辨率方法。Qwen2-VL引入了Naive Dynamic Resolution机制,使模型能够动态地将不同分辨率的图像转换为不同的视觉令牌数量。这种方法允许模型生成更高效和准确的视觉表示,紧密…...

Docker——入门介绍

目录 1.初识 Docker1.1.什么是 Docker1.1.1.应用部署的环境问题1.1.2.Docker 解决依赖兼容问题1.1.3.Docker 解决操作系统环境差异1.1.4.小结 1.2.Docker 和虚拟机的区别1.3.Docker 架构1.3.1.镜像和容器1.3.2.DockerHub1.3.3.Docker 架构1.3.4.小结 1.4.安装 Docker1.4.1.概述…...

02数组+字符串+滑动窗口+前缀和与差分+双指针(D2_字符串(D2_刷题练习))

目录 1. 最长公共前缀 1.1. 题目描述 1.2. 解题方案 方案一&#xff1a;纵向对比 方案二&#xff1a;横向对比 方案三&#xff1a;最值对比 方案四&#xff1a;分治 方案五&#xff1a;二分 1.3. 知识归纳 2. 左旋转字符串&#xff08;简单&#xff09; 2.1. 题目描述…...

【redis进阶】集群 (Cluster)

目录 一、基本概念 二、数据分片算法 2.1 哈希求余 2.2 一致性哈希算法 3.3 哈希槽分区算法 (Redis 使用) 三、集群搭建 (基于 docker) 3.1 创建目录和配置 3.2 编写 docker-compose.yml 3.3 启动容器 3.4 构建集群 四、主节点宕机 4.1 处理流程 五、集群扩容 六、集群缩容 (选…...

Python案例--100到200的素数

一、问题描述 素数&#xff08;Prime Number&#xff09;是指在大于1的自然数中&#xff0c;除了1和它本身以外不再有其他因数的数。判断一个数是否为素数是计算机科学和数学中的一个经典问题。本实例的目标是找出101到200之间的所有素数&#xff0c;并统计它们的数量。 二、…...

C语言,无法正常释放char*的空间

问题描述 #include <stdio.h> #include <stdio.h>const int STRSIZR 10;int main() {char *str (char *)malloc(STRSIZR*sizeof(char));str "string";printf("%s\n", str);free(str); } 乍一看&#xff0c;这块代码没有什么问题。直接书写…...

重回C语言之老兵重装上阵(十五)C语言错误处理

C语言错误处理 在C语言中&#xff0c;错误处理是非常重要的一部分。C语言没有像高级语言&#xff08;例如Python、Java&#xff09;那样内建的异常处理机制&#xff08;如try-catch&#xff09;&#xff0c;但它提供了几种方法来捕捉和处理错误。正确的错误处理可以提高程序的稳…...

基于微信的课堂助手小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

Effective C++ 规则50:了解 new 和 delete 的合理替换时机

1、背景 在 C 中&#xff0c;new 和 delete 是动态分配内存的核心操作符。然而&#xff0c;直接使用它们有时会增加程序的复杂性&#xff0c;甚至导致内存泄漏和其他问题。因此&#xff0c;了解何时替换 new 和 delete 并选择更适合的内存管理策略&#xff0c;是编写高效、健壮…...

Alfresco Content Services dockerCompose自动化部署详尽操作

Alfresco Content Services docker社区部署文档 Alfresco Content Services简介 Alfresco Content Services&#xff08;简称ACS&#xff09;是一款功能完备的企业内容管理&#xff08;ECM&#xff09;解决方案&#xff0c;主要面向那些对企业级内容管理有高要求的组织。具体…...

学习第七十六行

提高github下载速度方法 1.github转码云 2.https://github.com.cnpmjs.org com后面加东西 对于面试笔试&#xff0c;最好方法刷力扣&#xff0c;1000题包进大厂的...

YOLOv11改进,YOLOv11检测头融合DynamicHead,并添加小目标检测层(四头检测),适合目标检测、分割等任务

摘要 作者提出一种新的检测头,称为“动态头”,旨在将尺度感知、空间感知和任务感知统一在一起。如果我们将骨干网络的输出(即检测头的输入)视为一个三维张量,其维度为级别 空间 通道,这样的统一检测头可以看作是一个注意力学习问题,直观的解决方案是对该张量进行全自…...

一个基于Python+Appium的手机自动化项目~~

本项目通过PythonAppium实现了抖音手机店铺的自动化询价&#xff0c;可以直接输出excel&#xff0c;并带有详细的LOG输出。 1.excel输出效果: 2. LOG效果: 具体文件内容见GitCode&#xff1a; 项目首页 - douyingoods:一个基于Pythonappium的手机自动化项目&#xff0c;实现了…...

【后端开发】字节跳动青训营之性能分析工具pprof

性能分析工具pprof 一、测试程序介绍二、pprof工具安装与使用2.1 pprof工具安装2.2 pprof工具使用 资料链接&#xff1a; 项目代码链接实验指南pprof使用指南 一、测试程序介绍 package mainimport ("log""net/http"_ "net/http/pprof" // 自…...

Linux:线程池和单例模式

一、普通线程池 1.1 线程池概念 线程池&#xff1a;一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价&…...

使用iis服务器模拟本地资源服务器unityaddressables热更新出错记录

editor中设置了using exculexing 模拟远程加载addressable可以实现资源热更新&#xff0c;build后的软件却没有成功。 iis服务器中mime中需要设置bundle的文件扩展名&#xff0c;时editor成功&#xff0c;build后失败 原因没有设置hash的扩展名&#xff0c;设置后editor和buil…...

TikTok广告投放优化策略:提升ROI的核心技巧

在短许多品牌和商家纷纷投入广告营销&#xff0c;争夺这片潜力巨大的市场。然而&#xff0c;在激烈的竞争环境中&#xff0c;如何精准有效地投放广告&#xff0c;优化广告效果&#xff0c;实现更高的投资回报率&#xff08;ROI&#xff09;成为了广告主关注的核心。 一. 精准受…...

Hash表

哈希表存储结构&#xff08;开放寻址法&#xff0c;拉链法&#xff09;字符串哈希方式&#xff08;添加、查找h(x)&#xff09; 常见从0~10^9映射到0~10^5就要对10^5取mod&#xff08;取模一般要质数最好&#xff09;但是可能会有冲突 1.拉链法&#xff1a;O(1)&#xff0c;每…...

题解:P10972 I-Country

题目传送门 思路 因为占据的连通块的左端点先递减、后递增&#xff0c;右端点先递增、后递减&#xff0c;所以设 f i , j , l , r , x ( 0 / 1 ) , y ( 0 / 1 ) f_{i,j,l,r,x(0/1),y(0/1)} fi,j,l,r,x(0/1),y(0/1)​ 为前 i i i 行中&#xff0c;选择 j j j 个方格&#x…...

linux常用加固方式

目录 一.系统加固 二.ssh加固 三.换个隐蔽的端口 四.防火墙配置 五.用户权限管理 六.暴力破解防护 七.病毒防护 八.磁盘加密 九.双因素认证2FA 十.日志监控 十一.精简服务 一.系统加固 第一步&#xff1a;打好系统补丁 sudo apt update && sudo apt upgra…...

笔灵ai写作技术浅析(二):自然语言处理

一、词法分析(Lexical Analysis) 1.1 概述 词法分析是NLP的第一步,主要任务是将连续的文本分割成有意义的单元(词或词组),并对这些单元进行标注,如词性标注(POS tagging)。词法分析的质量直接影响后续的句法分析和语义理解。 1.2 技术细节 1.分词(Tokenization)…...

PyCharm介绍

PyCharm的官网是https://www.jetbrains.com/pycharm/。 以下是在PyCharm官网下载和安装软件的步骤&#xff1a; 下载步骤 打开浏览器&#xff0c;访问PyCharm的官网https://www.jetbrains.com/pycharm/。在官网首页&#xff0c;点击“Download”按钮进入下载页面。选择适合自…...

深度解析:基于Vue 3与Element Plus的学校管理系统技术实现

一、项目架构分析 1.1 技术栈全景 核心框架&#xff1a;Vue 3 TypeScript UI组件库&#xff1a;Element Plus&#xff08;含图标动态注册&#xff09; 状态管理&#xff1a;Pinia&#xff08;用户状态持久化&#xff09; 路由方案&#xff1a;Vue Router&#xff08;动态路…...

Python从0到100(八十五):神经网络-使用迁移学习完成猫狗分类

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…...

苍穹外卖 项目记录 day09 历史订单

文章目录 查询历史订单查询订单详情取消订单再来一单 查询历史订单 分页查询历史订单可以根据订单状态查询展示订单数据时&#xff0c;需要展示的数据包括&#xff1a;下单时间、订单状态、订单金额、订单明细&#xff08;商品名称、图片&#xff09; #OrderController/*** 历…...