2

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

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

4

5 回答 5

8

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

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

vector.resize(MAX_SIZE);
size_t items = write_array(&(vec[0]), MAX_SIZE)
vector.resize(items);
于 2009-03-03T08:33:51.993 回答
2

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

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

vec.resize(maxSizePossible);
size_t len = cfunc(&(vec[0]));
vec.resize(len);
于 2009-03-03T08:29:02.160 回答
1

嗯..
vector.resize(size);
?

于 2009-03-03T08:28:57.357 回答
1

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

于 2009-03-03T08:30:03.407 回答
0

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

于 2009-03-03T08:45:29.390 回答