首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于delete一个list的效率有关问题

2013-01-21 
关于delete一个list的效率问题我写了一个小测试程序:class Test{public:Test(int row 240 ,int col 32

关于delete一个list的效率问题

我写了一个小测试程序:


class Test
{
public:
Test(int row = 240 ,int col = 320):Row(row),Col(col)
{
data = new list<int>* [Row];
for(int i = 0; i < Row;++i)
{
data[i] = new list<int>[Col];
}
}

~Test()
{

for(int i =0; i < Row;++i)
{
delete [] data[i];
}
delete [] data;
cout<<"ok"<<endl;
}
void addData()
{
for(int i = 0; i < Row; ++i)
{
for(int j = 0; j < Col; ++j)
{
for(int k = 0; k < 50;++k)
{
data[i][j].push_back(k);
}
}
}

}
list<int> **data;
int Row;
int Col;
};




int main()
{
Test t1;
t1.addData();//这句加上或者不加析构速度差距很大
return 0;
}


发现程序在析构时是速度特别慢,尤其是执行delete [] data[i];这语句时,速度特别慢。
我的初衷是要对图像的每个像素维护一个数据结构,而且要对这个数据结构做增删改查各种操作。不知道是我的程序的问题,还是删除一个list时就是这么慢?
[解决办法]
你可以试试用vector,看看速度有没有改善
[解决办法]
你的像素是二维数组,那就int** data;
你既然用了list,那就用到底 list<list<int>> data;
[解决办法]
析构几万个list,当然慢了。。。
[解决办法]
标准模板库不是万能的,它只是把各种基本数据结构的繁琐操作封装起来而已
楼主这个问题就不能用链表,不管是自己写还是用标准模板库都一样,效率低到无以复加
[解决办法]
你用List你要干什么,正常来说,像素追寻快速,vector比list强,但这你用stl浪费空间。
假设你的像素 1280*800 ,每个像素都有自己的信息结构。 用数组存不就行了。
[解决办法]
用deque
[解决办法]
这样规模的list delete必然很慢, 有如此多的数组最好用数组

template<typename T, int row, int col, int k> class Test{
 T a[row][col][k];
 ...
};
[解决办法]
lz的需求里为什么有pushfront这个要求?处理图像还要加像素?

你的代码里一个像素用一个int类型表示,然后放入list一个node节点,list本身就是双向链表。。。node的2个链表指针占的空间比实际要用到数据还大!浪费了大量的空间。另这里那么多小节点频繁的构造和释放,不自己接手内存管理是不行的。

还是推荐vector,你这个需求用vector绝对比list省空间和查询,修改等操作的速度更快,频繁构造和释放的也要自己接手内存管理,最后是看你的那个pushfront的要求怎么解决。
[解决办法]
建议楼主用一维数组模拟二维数组,一次new,一次delete即可~~~

[解决办法]
这些做成动态的没有什么问题啊,STL都支持,为什么要固定大小呢
[解决办法]
阅读了楼主的codes以后,我知道楼主的问题出在哪里了

第一 : 资料结构还没修,或者没学好
第二 : 没好好的学习该如何使用stl

vector, list, map, set, unordered_set等stl的containers都是
动态分配内存的,他们会自己管理自己的资源,你不用再new一个
我写个残废的vector实做你就知道是怎么一回事了


template<typename T>
class poor_vector
{
public :
  poor_vector() : data_(0) {}  

  void reserve (size_t n){


    data_ = new T[n];
  }

  ~vector() { delete data_; data_ = 0; }

private : 
  T *data_;

};



所以vector的资源是动态分配的,list也一样

热点排行