У меня проблема, как эффективно вернуть большой двумерный вектор из функции. Моя задача - прочитать большой файл и вернуть данные матрицы.Эффективный возврат двухмерного вектора
Дизайн один:
std::vector<std::vector<double> > loadMatrix(const char* fileName){
//read file
return matrix;
}
Это один не является эффективным.
дизайн два:
std::vector<std::vector<double> >& loadMatrix(const char* fileName){
//read file
return matrix;
}
//get some errors
Мне просто интересно, если есть способ решить эту проблему.
Почему вы говорите, что это не эффективно? Вы профилировались с оптимизацией? –
Во-первых, _do not_ возвращает ссылку на локальный объект (это неэффективно, это UB). Во-вторых, если ваш компилятор поддерживает C++ 11, верните его значение. В противном случае подумайте об использовании трюка подкачки. В любом случае, профиль профиля профиля (до оптимизации и после оптимизации). – utnapistim
С C++ 11 первый, скорее всего, будет * перемещен * и не скопирован. Для второго варианта существует риск неопределенного поведения (если вы возвращаете ссылку на локальную переменную). –