我将我的向量传递给一个需要 ac 数组的函数。它返回它填充的数据量(类似于 fread)。有没有办法告诉我的向量改变它的大小以包含函数传入的数量?
当然,我确保向量有容量()来保存这么多数据。
不,没有支持“扩展”向量的方法,因此它包含已直接复制的额外值。依靠“容量”分配您可以写入的非大小内存绝对不是您应该依赖的东西。
您应该在调用函数之前调整大小,然后再调整为正确的值,以确保您的向量具有所需的空间量。例如
vector.resize(MAX_SIZE);
size_t items = write_array(&(vec[0]), MAX_SIZE)
vector.resize(items);
capacity
仅告诉您保留了多少内存,而不是向量的大小。
您应该首先将大小调整为所需的最大大小:
vec.resize(maxSizePossible);
size_t len = cfunc(&(vec[0]));
vec.resize(len);
嗯..
vector.resize(size);
?
std::vector 有一个以新大小作为参数的 resize() 方法。因此,只需使用函数返回的数字调用它就可以了。
std::back_inserter
可能是你需要的。假设您的输入函数能够使用迭代器,请将它传递给std::back_inserter(myvector)
. 这会将push_back
所有内容写入迭代器,并根据需要隐式调整向量的大小。