扩展作为内存传递的向量的大小
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
写入迭代器的所有内容,并根据需要隐式调整向量的大小。
【讨论】:
以上是关于扩展作为内存传递的向量的大小的主要内容,如果未能解决你的问题,请参考以下文章