在将 vector 与类一起使用时,我遇到了意外的性能下降。
我有一个 csv_File 类,它读取 csv 文件并将内容存储在二维 vector 中。有一个允许访问的成员函数,例如
csv_File file("file.csv");
file.access(2,2);
访问 2,2 元素。
然后,我有另一个类 csv_Array 将多个 csv_File 对象存储在一个 vector 中,例如私有(private)成员 vector 有一个允许访问的成员函数,即它返回一个 csv_File 对象,例如:
csv_Array file_array(5); //store 5 csv_File objects
file_array.grab(0).access(2,2);
在第二行中,grab 返回一个 csv_File 对象(在本例中为第一个),access 是 csv_File 对象的成员函数。
但是,我注意到调用 csv_Array.grab(0).access(2,2); 比应该的慢得多(应该只有 3 个 vector::at 调用)。
是否有某种隐藏的拷贝正在运行,这使得它变得非常慢?
编辑:以下是一些相关的函数原型(prototype):
//Access in csv_File
std::string access(int row, int column);
//grab in csv_Array and csv_Analysis (mentioned below)
csv_File grab(int index);
其他详细信息(如有必要): 这段代码的应用是将一堆 csv 文件加载到内存中,然后将其传递给将对数据进行一些计算的友元类。示意性地,我有以下内容:
1)csv_Array有私有(private)成员 vector 存储; 2) csv_Analysis 是 csv_Array 的友元类 3)csv_Analysis访问 vector 存储,在csv_Array中 4)此访问是通过将 csv_Analysis 传递给 csv_Array 中存储的引用来完成的(因此希望没有拷贝......),例如 民众: csv_Analysis(csv_Array &csv_block);
因此,上面给出的调用[file_array.grab(0).access(2,2); ] 实际上在两者之间还有一个额外的类“级别”,更像是
csv_Analysis analysis_Object(file_array);
analysis_Object.grab(0).access(2,2);
其中grab作用相同,也定义为csv_Analysis类的成员函数。
最佳答案
你可能想让 grab
返回一个引用而不是一个拷贝:
csv_File& grab(int index);
关于c++ - STL vector 中的隐藏拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6514438/