今天我遇到了一个问题,即访问向量元素会随着向量的大小而变慢。由于这不是我的代码,我无法发布它,所以请多多包涵。我将尝试尽可能详细地描述它。
代码的功能如下: 1. Dataset 类,采用.txt 文件,其中包含文件名。这些指向需要加载的标准 png 图像。这是由一个Image<T>
班级完成的。图像被加载Image<unsigned char>
并推回std::Vector
. 2. 数据加载完成后。我可以访问我的数据集中的向量以便使用它。所以它看起来像这样:
Dataset d;
d.init("filenames_list.txt"); //Loads the images
for(int i=0; i< d.getDatavector().size(); i++){
Image<unsigned char> current = d.getDatavector()[i];
//Do work on current image here.
}
这里 getDatavector() 将返回一个std::Vector<Image<unsigned char> >
. 图像包含三个整数,宽度、高度和通道数,此外还有一个指向交错数据的 Boost 共享指针。
对于小型测试运行,我有一个包含大约 150 个图像的文件列表。用这个运行程序很好,速度测量告诉我
Image<unsigned char> current = d.getDatavector()[i];
大约需要 10ms 才能完成。但是,如果我想处理包含 1500 张图像的完整数据集,则上述行大约需要 500 毫秒才能完成。我尝试做很多不同的事情来修复它,但我受到代码的一般结构和内存的限制。因为如果我执行以下操作:
const std::Vector<Image<unsigned char> > data = d.getDatavector();
在循环之前,它运行得非常快,但我很快就用完了内存。
我知道我的问题描述有些含糊,我不希望找到确切的解决方案,但我希望有一些关于在哪里查找的提示。我搜索了类似的问题,但人们似乎只关心向量与数组的一般速度。我的问题是,速度会随着向量的长度而降低!如果有人看到这种问题,非常欢迎任何建议!
到目前为止,我已经尝试使用 std::vector::iterator 或使用 (d.getDatavector().data()) 作为指针访问内容。似乎没有什么可以提高它的速度。