C:使用std :: vector可以安全地像数组一样吗?

C:使用std :: vector可以安全地像数组一样吗?,第1张

概述我需要一个固定大小的元素数组,并调用它们需要知道它们如何放入内存的函数,特别是: >像glVertexPointer这样的函数,需要知道顶点在哪里,它们距离另一个是多远,等等.在我的情况下,顶点将是要存储的元素的成员. >要获取这个数组中的一个元素的索引,我宁愿避免在我的元素中有一个索引字段,但是宁愿玩指针算术(即:Element * x的索引将是x – & array [0 ]) – btw,这 我需要一个固定大小的元素数组,并调用它们需要知道它们如何放入内存的函数,特别是:

>像glVertexPointer这样的函数,需要知道顶点在哪里,它们距离另一个是多远,等等.在我的情况下,顶点将是要存储的元素的成员.
>要获取这个数组中的一个元素的索引,我宁愿避免在我的元素中有一个索引字段,但是宁愿玩指针算术(即:Element * x的索引将是x – & array [0 ]) – btw,这对我来说听起来很脏:是好习惯还是应该做别的事情?

使用std :: vector可以安全吗?

有些东西让我觉得std :: array更合适,但是

>我的架构的构造函数和析构函数很少被称为:我不介意这样的开销.
>我要将std :: vector的容量设置为我需要的大小(用于std :: array的大小,因此不会因为零星重新分配而占用开销.
>我不介意std :: vector的内部结构有一点空间开销.
>我可以使用这个能力来调整向量的大小(或者更好的是:在设置过程中选择一个大小),我认为没有办法用std :: array做这个,因为它的大小是一个模板参数(太糟糕了:我可以使用一个旧的C-like数组,只是在堆上动态分配它).

如果std :: vector对我的目的很好,我想知道细节,如果它将有一些关于std :: array(或一个普通的C数组)的运行时开销:

我知道,一旦增加了它的大小,它就会调用任何元素的默认构造函数(但是,如果我的数据有一个空的默认构造函数,我猜这不会花费任何东西),对于析构函数来说也是如此.还要别的吗?

解决方法 向量保证所有元素都具有连续的内存,因此可以安全地在您的方案中使用.与c风格的阵列相比,可以有一个小的表现,比如由于矢量实现的索引验证.在大多数情况下,性能是由别的决定的,所以我不用担心,直到实际测量的性能表明这是一个真正的问题.

如其他人所指出的那样,如果您使用指向元素(或迭代器)的指针来访问它时,请确保在使用存储在其中的数据时不重新分配向量.

总结

以上是内存溢出为你收集整理的C:使用std :: vector可以安全地像数组一样吗?全部内容,希望文章能够帮你解决C:使用std :: vector可以安全地像数组一样吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1252082.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存