如何发现 std::vector 的大小/长度(以字节为单位)?

Posted

技术标签:

【中文标题】如何发现 std::vector 的大小/长度(以字节为单位)?【英文标题】:How can I discover the size/length(in bytes) of a std::vector? 【发布时间】:2013-01-09 15:16:12 【问题描述】:

我有一个向量,我想将它写入文件并将其读取到文件中,但无法使用 sizeof 运算符确定向量的逻辑大小。

那我该怎么办?

【问题讨论】:

这就是为什么他们有一个size 函数。但是,在遍历所有元素时,迭代器是比需要知道大小更自然的选择。 如何将其写入文件取决于元素的类型——首先您需要知道是否(以及如何)将它们写入文件。 -1 表示不阅读文档。 和 &vector.front() 会给你一个指向内存的指针,这样你就可以 mmap 文件和 memcpy 数据跨度> 【参考方案1】:

一个 c++ std::vector 有一个方法 size() 返回它的大小。

编辑:据我所知,您需要计算给定向量使用的内存。您不能为此使用 sizeof,因为向量使用动态内存并且仅存储包含其元素的动态数组的指针。所以我最好的建议是将每个元素所需的内存乘以元素的数量。请注意,如果对象存储了指向某些动态分配对象的指针,这将再次不起作用 - 您将不得不再次单独计算它们的大小。

据我所知,没有简单的方法可以在 c++ 中以字节为单位计算内存。

【讨论】:

你想测量内存大小这个向量需要吗? 嘿,我的向量要获得它的大小更复杂,因为它是由一个对象组成的,它由一些向量和一些字符串以及许多其他具有相同情况的东西组成,我想要一个像 memcopy 这样的东西

以上是关于如何发现 std::vector 的大小/长度(以字节为单位)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将std :: vector的大小作为int?

如何在调整大小的 std::vector 的最后一个元素之后插入?

从文件中读取未知长度的 int 数组

如何调整 Eigen::MatrixXd 的 std::vector 的大小

如何将 std::vector 的容量限制为元素的数量

std::vector pop_back() 实现