c++ vector 赋值 只能用push_back()赋值 ?使用下标赋值出错,不能使用标赋值吗?

文章目录

  • 1 push_back()赋值
  • 2 下标赋值
    • 2.1 下标赋值出错
    • 2.2 vector 真的 不能使用标赋值吗?
      • 2.2.1 只能使用push_back() 赋值情况
      • 2.2.2 push_back() 和 下标赋值 都可以
      • 2.2.3 先push_back()赋值,再下标赋值
    • 2.3 push_back() 和 下标赋值 两种特点对比测试
  • 3 vector初始化赋值方法
    • 3.1 直接赋值
    • 3.2 迭代器赋值
    • 3.3 移动赋值
    • 3.4 vector赋值给另一个vector
    • 3.5 使用swap进行赋值
    • 3.6 通过数组地址初始化

1 push_back()赋值

vector<int> v;此时vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间
这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况 push_back()

push_back()是在vector尾部动态追加

int main()
{vector<int> v;v.push_back(1);cout << v[0] << " " << endl;return 0;
}

在这里插入图片描述

2 下标赋值

2.1 下标赋值出错

int main()
{vector<int> v;v[0] = 1;cout << v[0] << " " << endl;return 0;
}

报错 “vector subscript out of range”,下标超出范围;

问题在于“v[0] = 1”一句,
一开始vector为空时,因为还没有分配内存空间。使用下标赋值 运行会出现内存非法操作的错误。
在这里插入图片描述

在这里插入图片描述

2.2 vector 真的 不能使用标赋值吗?

vector 真的 不能使用标赋值吗?并不是

分析下表出错原因:
vector<int> v;此时vector为空, size为0,一开始vector为空时,因为还没有分配内存空间。使用下标赋值 运行会出现内存非法操作的错误。

2.2.1 只能使用push_back() 赋值情况

1 默认初始化,无参(没给定数组大小)

 vector<int> res;//默认初始化

vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间
这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况;

添加元素,只能用.push_back();

for (int i = 10; i < 18; i++)res.push_back(i);

下面 下标赋值错误,因为还没有分配内存空间。

2.2.2 push_back() 和 下标赋值 都可以

2 带参数构造初始化 (给定数组大小、初始值)

vector<int> res(8);

res中将包含8个元素,每个元素进行缺省的值初始化,对于int,也就是被赋值为0,因此res被初始化为包含8个0。

等同于

vector<int> res(80);

指定值初始化,ilist5被初始化为包含7个值为3的int。

vector<int> ilist5(7,3);

添加元素,可用res[i] = a;也可.push_back(a);

for (int i = 0; i < 8; i++)res.push_back(i);
for (int i = 0; i < 8; i++)res[i] = i;

2.2.3 先push_back()赋值,再下标赋值

//先通过 push_back()赋值,使vector不为空时分配内存空间;再进行下标赋值

int main()
{//先通过 push_back()赋值,使vector不为空时分配内存空间;再进行下标赋值vector<int> v;v.push_back(1);for (int i = 0; i < 8; i++)v[i] = i;for (int i = 0; i < v.size(); i++)cout << v[i] << endl;return 0;
}

失败,
和直接下标赋值效果一样的
在这里插入图片描述

2.3 push_back() 和 下标赋值 两种特点对比测试

//定义数组vector<int> res(8);cout << "res.size() = " << res.size() << endl;//给数组重新赋值for (int i = 0; i < 8; i++)res[i] = i;//输出for (int i = 0; i < res.size(); i++)cout << res[i] << endl;cout << "res.size() = " << res.size() << endl;

在这里插入图片描述

//定义数组vector<int> res(8);cout << "res.size() = " << res.size() << endl;//给数组重新赋值for (int i = 0; i < 8; i++)res.push_back(i);//输出for (int i = 0; i < res.size(); i++)cout << res[i] << endl;cout << "res.size() = " << res.size() << endl;

在这里插入图片描述

3 vector初始化赋值方法

vector赋值有多种方法,可以使用初始化列表、构造函数、拷贝构造函数、直接赋值、迭代器赋值、移动赋值等方式。其中,初始化列表方式最为常用。

	vector<int> v1 = { 1, 2, 3 };  // 初始化列表vector<int> v2(5);  // 元素个数为5vector<int> v3(5, 1);  // 元素个数为5,每个元素的初值为1vector<int> v4(v3);  // 拷贝v3vector<int> v5(v1.begin(), v1.end());  // 拷贝v1的元素vector<int> v6 = v4;  // 拷贝v4

3.1 直接赋值

vector v1 = {1, 2, 3};
vector v2 = v1;  // 直接赋值,一次赋值即可完成拷贝
vector v3;
v3 = v1;  // 直接赋值

直接赋值是最常见的一种赋值方式,实现简单明了。

3.2 迭代器赋值

vector<int> v1 = {1, 2, 3};
vector<int> v2;
v2.assign(v1.begin(), v1.end());  // 迭代器赋值
v2.assign(5, 1);  // 元素个数为5,每个元素的初值为1

迭代器赋值方式使用assign函数实现,可以实现指定范围的元素插入、赋值等操作。

3.3 移动赋值

vector<int> v1 = {1, 2, 3};
vector<int> v2 = std::move(v1);  // 移动赋值

移动赋值通过std::move函数实现,可以在不复制元素的情况下将一个vector转移到另一个vector中。

3.4 vector赋值给另一个vector

vector可以直接赋值给另一个vector,也可以使用assign函数实现。

vector<int> v1 = {1, 2, 3};
vector<int> v2;
v2.assign(v1.begin(), v1.end());  // assign函数赋值

3.5 使用swap进行赋值

vector<int> v1 = {1, 2, 3};
vector<int> v2;
v2.swap(v1);//将v1赋值给v2,此时v1变成了v2

3.6 通过数组地址初始化

int a[5]={1,2,3,4,5}
vector<int> vec_i(a,a+5);

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

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

相关文章

谷粒商城【成神路】-【1】——项目搭建

目录 &#x1f95e;1.整体架构图 &#x1f355;2.微服务划分图 &#x1f354;3.开发环境 &#x1f354;4.搭建git &#x1f32d;5.快速搭建服务 &#x1f37f;6.数据库搭建 &#x1f9c2;7.获取脚手架 &#x1f953;8.代码生成器 &#x1f373;9.创建公共模块 …

论文笔记(四十二)Diff-DOPE: Differentiable Deep Object Pose Estimation

Diff-DOPE: Differentiable Deep Object Pose Estimation 文章概括摘要I. 介绍II. 相关工作III. DIFF-DOPEIV. 实验结果A. 实施细节和性能B. 准确性C. 机器人-摄像机校准 V. 结论VI. 致谢 文章概括 作者&#xff1a;Jonathan Tremblay, Bowen Wen, Valts Blukis, Balakumar Su…

品牌突围|内容营销「共创公式」全面讲解

为什么品牌要扎根小红书&#xff1f;除了种草投放&#xff0c;品牌还能做些什么&#xff1f; 在小红书&#xff0c;迎接消费者共创的时代&#xff0c;激活品牌营销的无限潜能。 拥抱多元 在新机遇中预见未来 2023年&#xff0c;各大社交媒体平台涌现出了许多热点&#xff0c…

项目中日历管理学习使用

一些项目中会有日历或日期设置&#xff0c;最基本的会显示工作日&#xff0c;休息日&#xff0c;节假日等等&#xff0c;下面就是基于项目中的日历管理功能&#xff0c;要显示工作日&#xff0c;休息日&#xff0c;节假日 效果图 获取国家法定节假日工具类 public class Holi…

项目中遇到通过域名访问服务提示 Service name unknow

目录 项目中遇到通过域名访问服务提示 Service name unknow 1.问题描述2.问题原因3.解决思路4.解决方案文章所属专区 项目问题解决 1.问题描述 在CentOS 系统环境下 项目中遇到通过域名访问服务提示 Service name unknow,但是 网络是连通的 通过ping 和telnet都能够验证。 …

【江科大】STM32:外部中断(Extern Interrupt)

文章目录 EXTI&#xff08;Extern Interrupt&#xff09;外部中断EXIT的基本结构EXIT框图 旋转编码器简介库函数&#xff1a;对射式红外传感器计次&#xff1a;代码展示&#xff1a;旋转编码器计次注意&#xff1a; EXTI&#xff08;Extern Interrupt&#xff09;外部中断 功能…

STM32标准库开发—W25Q64详细介绍

W25Q64简介 Flash编程原理都是只能将1写为0&#xff0c;而不能将0写成1.所以在Flash编程之前&#xff0c;必须将对应的块擦除&#xff0c;而擦除的过程就是将所有位都写为1的过程&#xff0c;块内的所有字节变为0xFF.因此可以说&#xff0c;编程是将相应位写0的过程&#xff0c…

Codewave学习体验分享:低代码开发世界的黑马

前言 Codewave平台介绍 CodeWave智能低代码开发平台基于网易自研拥有大规模参数和深度学习能力的智能模型底座产品架构,为企业级应用提供更加智能化研发的软件生产方式,IT人员可以轻易实现从“智能生成”到“可视化拖拽调整”的全栈低代码应用搭建,让复杂应用开发更加高效,加快…

Flink生产环境相关问题

1. FlinkKafka保证精确一次消费相关问题&#xff1f; Fink的检查点和恢复机制和可以重置读位置的source连接器结合使用&#xff0c;比如kafka&#xff0c;可以保证应用程序不会丢失数据。尽管如此&#xff0c;应用程序可能会发出两次计算结果&#xff0c;因为从上一次检查点恢…

Azure Private endpoint DNS 记录是如何解析的

Private endpoint 从本质上来说是Azure 服务在Azure 虚拟网络中安插的一张带私有地址的网卡。 举例来说如果Storage account在没有绑定private endpoint之前&#xff0c;查询Storage account的DNS记录会是如下情况&#xff1a; Seq Name …

Java 字符串 06 练习-字符串拼接、反转、金额转换(黑马)

代码&#xff1a; //import java.util.Scanner; public class practice{public static void main(String[] args) {int arr [] {1,2,3,4};String str arrToString(arr);System.out.println(str);}public static String arrToString(int [] arr){if(arrnull){return "&q…

(27)Linux信号的产生核心转储---初步认识信号

一、信号入门 1. 生活角度的信号 你在网上买了很多件商品&#xff0c;再等待不同商品快递的到来。但即便快递没有到来&#xff0c;你也知道快递来临时&#xff0c; 你该怎么处理快递。也就是你能“识别快递”当快递员到了你楼下&#xff0c;你也收到快递到来的通知&#xff0…

docker 体验怀旧游戏(魂斗罗等)

docker run --restart always -p 8081:80 --name fc-games -d registry.cn-hangzhou.aliyuncs.com/bystart/fc-games:latest ip:8081访问 jsnes: js制作了一个网页版的NES模拟&#xff0c;可以在网页上玩fc游戏 (gitee.com)

git用法总结

以gitee为例&#xff0c;GitHub也可参考本文 创建远程仓库 在自己的gitee主页 创建本地仓库 在文件夹下&#xff0c;右键→git bash here git init添加gitignore vi .gitignoregitignore里的内容根据自己实际情况设置&#xff0c;这里举个例子 # #开头的是注释 # Prer…

MiniTab的单值的变量控制图——I-MR 控制图分析

单值的变量控制图分为&#xff1a;I-MR 控制图、Z-MR 控制图、单值控制图、移动极差控制图4种。 I-MR 控制图 功能菜单请选择&#xff1a;统计>控制图>单值的变量控制图>I-MR。 使用 I-MR 控制图 可以在拥有连续数据且这些数据是不属于子组的单个观测值的情况下监视…

HarmonyOS漫谈---套壳安卓还是套壳苹果?HarmonyOS更像谁?

2020年以前华为手机的操作系统是EMUI,这个是在Android基础上扩展而来的,版本和android几乎一致,和市面上其它android手机厂家搭载的系统并无本质不同 2019年5月16日,美国针对华为发起了第一轮制裁。8月华为发布了HarmonyOS1.0,此时还只是主要在IOT设备上使用,智慧屏成为…

探索 DevOps 中的自动化技术

DevOps 是一种强调开发与 IT 运营之间合作的软件开发范式&#xff0c;主要依靠自动化来优化流程、提高生产力并确保及时、可靠的软件交付。以下是对 DevOps 不可或缺的关键自动化技术的探索&#xff1a; 1.持续集成/持续部署&#xff08;CI/CD&#xff09; 在 DevOps 领域&…

恒创科技:香港服务器内存不足有哪些原因?

内存是服务器中非常重要的组件之一&#xff0c;它直接影响服务器的运行速度和稳定性。然而&#xff0c;在使用香港服务器的过程中&#xff0c;有时候会出现内存不足的情况&#xff0c;导致服务器性能下降&#xff0c;甚至出现宕机等问题。那么&#xff0c;香港服务器内存不足的…

css设置不可点击

文章目录 一、前言二、MDN三、使用四、注意五、总结六、最后 一、前言 在网页开发中&#xff0c;经常会遇到一种情况&#xff0c;就是需要将某个元素的点击事件屏蔽&#xff0c;使其在用户点击时没有任何反应。这时候&#xff0c;我们可以通过CSS的pointer-events属性设置为no…

视频编码器行业研究:预计到2028年全球市场规模将达到180.92亿元

随着AI技术向视频产业生产、传输和消费环节的渗透&#xff0c;AI技术在视频分析中的应用逐渐常态化&#xff0c;智能视频衍生而出。智能视频的多元应用重塑了视频产业链&#xff0c;视频处理技术根据不同的视频应用多维迸发&#xff0c;视频编解码技术与AI技术的结合具有共性和…