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

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 写入迭代器的所有内容,并根据需要隐式调整向量的大小。

【讨论】:

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