【发布时间】:2014-01-22 09:32:33
【问题描述】:
我有一个问题,如何从函数中有效地返回一个大的二维向量。 我的任务是读取一个大文件并返回一个矩阵数据。
设计一:
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
我只是想知道有没有办法解决这个问题。
【问题讨论】:
-
为什么说效率不高?您是否对优化进行了分析?
-
首先,不要返回对本地对象的引用(不是低效,是UB)。其次,如果您的编译器支持 C++11,则按值返回。否则考虑使用交换技巧。无论哪种方式,配置文件配置文件(优化之前和优化之后)。
-
对于 C++11,第一个很可能会移动而不是复制。对于第二个变体,存在未定义行为的风险(如果您返回对局部变量的引用)。
-
还有第三种选择:将“矩阵”作为非常量引用参数传递给函数,并返回布尔成功/失败指示符。
-
@JoachimPileborg 我怀疑它会被移动。该副本很可能会被完全删除,因此无需移动任何内容。