(ре) инициализирует вектор к определенной длине с начальными значениями

Специфичные для COM коды ошибок вы можете посмотреть на на сайте разработчика Microsoft .

Ваша конкретная ошибка 0x80070057 - это общая [COM] ошибка E_INVALIDARG, в основном один или несколько аргументов неверны.

Чтобы ответить на ваш вопрос, описания, понятные человеку, могут решать, документировать или нет архитектор указанной библиотеки. Вызовы COM обычно имеют приличную документацию о том, куда обращаться в случае ошибки, но найти их сложно.

Когда дело доходит до отладки ошибок, это снова зависит от документации, поставляемой с библиотекой.

TL; DR

Проверьте документацию или Google. Вы находитесь во власти создателя библиотеки.

6
задан Coding Mash 7 September 2012 в 20:10
поделиться

4 ответа

std::vector<double>(n).swap(vec);

После этого vec, как гарантируют, будет иметь размер и способность n со всеми значениями 0.0.

Возможно, более идиоматический путь начиная с C++ 11

vec.assign(n, 0.);
vec.shrink_to_fit();

со второй дополнительной строкой. В случае, где vec начинается с больше, чем n элементы, звонить ли shrink_to_fit компромисс между содержанием на большую память, чем требуется по сравнению с выполнением перераспределения.

10
ответ дан 8 December 2019 в 04:56
поделиться

Хорошо давайте закруглим способы сделать это :)

vec.swap(std::vector<double>(n));
std::vector<double>(n).swap(vec);
std::swap(vector<double>(n), vec);
std::swap(vec, vector<double>(n));
3
ответ дан 8 December 2019 в 04:56
поделиться
std::vector<double>(n).swap(vec);

Это имеет преимущество фактического уплотнения Вашего вектора также. (В Вашем первом примере, clear() не гарантирует, что уплотнил Ваш вектор.)

9
ответ дан 8 December 2019 в 04:56
поделиться

Ни один из фрагментов кода, которые Вы отправили, не делает освобождения памяти, таким образом, они примерно равны.

Прием подкачки, который все остальные продолжают отправлять, займет больше времени для выполнения, потому что он освободит память, первоначально используемую вектором. Это может или не может быть желательно.

2
ответ дан 8 December 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: