c++ - STL vector 中的隐藏拷贝?

标签 c++ memory-management vector copy

在将 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/

相关文章:

c++ - 如何保证进程调用malloc()时立即分配物理内存?

c++ - 类 vector 没有成员

c++ - "upcasting"的缺点是什么?

c++ - 重载 ‘func(char*&)’ 的调用不明确

c - 从虚拟内存地址查找物理内存地址

iphone - 导航 Controller 和包含子 CALayer 的 View 出现内存问题/过度释放

c++ - MapReduce - 直接插入 map 中 vector<int> 的第一个位置

c++ - 将对象的地址推送到 vector 后更改对象

c++ - 指向 vector 中项目的指针是不稳定的。

c++ - 使用 MPI 在超立方体中广播