Рассмотрим следующий фрагмент кода:Получить ссылку на неинициализированным станд :: элемент вектора
void ProcessVect(std::vector<double>& myInVect)
{
std::vector<double> myOutVect(myInVect.size());
for (size_t i =0; i < myInVect.size(); i++)
{
ProcessValue(myInVect[i], myOutVect[i]); // ProcessValue(double in, double& out);
}
DoSomething(myOutVect);
}
Этот код работает, но имеет тот недостаток, что myOutVect
инициализируется нулями первого и чем переписывается значение, рассчитанное в ProcessValue
,
Я должен сделать это для больших векторов и скорости. Невозможно изменить функцию ProcessValue
для принятия векторов.
Теперь мой вопрос: Есть ли способ передать ссылку на неинициализированный векторный элемент на функцию?
Я пробовал myOutVect.reserve()
без инициализации myOutVect
, но это дает мне ошибку "index out of bounds".
Другие решения моей проблемы, конечно, также приветствуются.
Эта нулевая инициализация не сильно влияет на вашу производительность. –
['std :: transform'] (http://en.cppreference.com/w/cpp/algorithm/transform) с [' std :: back_inserter'] (http://en.cppreference.com/w/cpp/iterator/back_inserter) (и 'reserve')? Но я сомневаюсь, что это действительно важно. – BoBTFish
* Я должен сделать это для больших векторов и вопросов скорости * - Вы действительно измерили производительность? – PaulMcKenzie