увеличить размер вектора, переданного как память - PullRequest
2 голосов
/ 03 марта 2009

Я передаю свой вектор функции, которая ожидает массив c. Возвращает количество заполненных данных (аналогично fread). Есть ли способ, которым я могу сказать своему вектору, чтобы он изменил свой размер, чтобы включить количество, которое передала функция?

конечно, я уверен, что вектор обладает способностью () удерживать такое количество данных.

Ответы [ 5 ]

8 голосов
/ 03 марта 2009

Нет, не существует поддерживаемого способа «развернуть» вектор, чтобы он содержал дополнительные значения, которые были непосредственно скопированы. Использование «емкости» для выделения памяти без размера, в которую вы можете записать, определенно не то, что вам следует положитесь.

Вы должны убедиться, что у вашего вектора достаточно места, изменив размер перед вызовом функции, а затем изменив правильное значение. Э.Г.

vector.resize(MAX_SIZE);
size_t items = write_array(&(vec[0]), MAX_SIZE)
vector.resize(items);
2 голосов
/ 03 марта 2009

capacity говорит вам только, сколько памяти зарезервировано, но это не размер вектора.

Сначала вам нужно изменить размер до максимально необходимого размера:

vec.resize(maxSizePossible);
size_t len = cfunc(&(vec[0]));
vec.resize(len);
1 голос
/ 03 марта 2009

std :: vector имеет метод resize () с новым размером в качестве параметра. Так что просто позвонив по номеру, возвращенному вашей функцией, все будет в порядке.

1 голос
/ 03 марта 2009

хмм ..
vector.resize(size);

0 голосов
/ 03 марта 2009

std::back_inserter может быть то, что вам нужно. Предполагая, что ваша функция ввода способна работать с итератором, передайте ее std::back_inserter(myvector). Это push_back все, что записано в итератор, и неявное изменение размера вектора при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...