扩展作为内存传递的向量的大小

Posted

技术标签:

【中文标题】扩展作为内存传递的向量的大小【英文标题】:expand size of vector passed as memory 【发布时间】:2009-03-03 08:23:47 【问题描述】:

我将我的向量传递给一个需要 c 数组的函数。它返回它填充的数据量(类似于 fread)。有没有办法让我的向量改变它的大小以包含函数传入的数量?

当然,我会确保向量有容量()来容纳这么多数据。

【问题讨论】:

【参考方案1】:

不,不支持“扩展”向量的方法,因此它包含已直接复制的额外值。依靠“容量”分配可以写入的非大小内存绝对不是你应该做的事情依靠。

您应该在调用函数之前调整大小,然后再调整到正确的值,以确保您的向量具有所需的空间量。例如

vector.resize(MAX_SIZE);
size_t items = write_array(&(vec[0]), MAX_SIZE)
vector.resize(items);

【讨论】:

【参考方案2】:

capacity 只告诉你保留了多少内存,而不是向量的大小。

您应该首先将大小调整为所需的最大尺寸:

vec.resize(maxSizePossible);
size_t len = cfunc(&(vec[0]));
vec.resize(len);

【讨论】:

【参考方案3】:

嗯..vector.resize(size); ?

【讨论】:

【参考方案4】:

std::vector 有一个以新大小作为参数的 resize() 方法。因此,只需使用函数返回的数字调用它就可以了。

【讨论】:

【参考方案5】:

std::back_inserter 可能是您需要的。假设您的输入函数能够使用迭代器,请将其传递给 std::back_inserter(myvector)。这将push_back 写入迭代器的所有内容,并根据需要隐式调整向量的大小。

【讨论】:

以上是关于扩展作为内存传递的向量的大小的主要内容,如果未能解决你的问题,请参考以下文章

GCC 向量扩展和 ARM NEON 的内存对齐问题

Saxon-HE Java 扩展 - 如何访问作为参数传递的 xsl 变量的值?

具有动态大小的 Python C 扩展类

C++ 向量初始容量

函数的扩展

扩展 R 中的内存大小限制