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

时间:2009-03-03 08:23:48

标签: c++ stl vector

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

当然我确保向量具有容量()来保存该数据量。

5 个答案:

答案 0 :(得分:8)

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

您应该在调用函数之前通过调整大小来确保向量具有所需的空间量,然后再调整大小为正确的值。 E.g。

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

答案 1 :(得分:2)

capacity仅告诉您保留了多少内存,但它不是矢量的大小。

您应该做的是首先调整到所需的最大尺寸:

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

答案 2 :(得分:1)

嗯..
vector.resize(size);

答案 3 :(得分:1)

std :: vector有一个resize()方法,新大小作为参数。所以简单地用函数返回的数字调用它应该没问题。

答案 4 :(得分:0)

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