C++:vector<vector<int> > a, int b[M][L].两种方式,那种效率高。 注:都采用下标寻址方式。
http://zhidao.baidu.com/link?url=laqSBrv-cGVs-nNwI4kjObGJ2UacUBf2gCBCbnwT-wC-UhpZ-UvKysB0DfzOWyan_srsTLYbJGEgaw1ET3uoTK
2011-03-15 12:09神气的狗皮膏药 分类:其他编程语言 | 浏览
1030 次
请赐教。
非常感谢 iamshuke 朋友。 我也试验过,只不过没想起用循环来扩大效果。 我只是增加纬度做实验,vector没问题,但是a[][]只要维度太大了,就无法分配空间了,所以我没试验出来。 主要是,现在我要尽可能提高时间效率(空间无所谓的)。分享到: 2011-03-15 18:18 提问者采纳
肯定是第二种效率高,毕竟vector寻址要多做些工作。不过这种差别应该会非常非常小,基本可以不考虑。
用下面的代码测试,在我的机器上,二维数耗时0.16s, vector耗时0.4s。
std::vector< std::vector<int> > a;
int b[100][100];
std::vector<int> tmp;
tmp.resize(100);
a.resize(100, tmp);
int i, nLoop;
DWORD dwTickCount1 = GetTickCount();
for(nLoop = 0; nLoop < 10000; nLoop++)
{
for(i=0; i<100; i++)
{
for(int j=0; j<100; j++)
{
b[i][j] = i+j;
}
}
}
DWORD dwTickCount2 = GetTickCount();
for(nLoop = 0; nLoop < 10000; nLoop++)
{
for(i=0; i<100; i++)
{
for(int j=0; j<100; j++)
{
a[i][j] = i+j;
}
}
}
DWORD dwTickCount3 = GetTickCount();
CString sMsg;
sMsg.Format(_T("%fs, %fs"),
(dwTickCount2-dwTickCount1)/1000.0,
(dwTickCount3-dwTickCount2)/1000.0);
AfxMessageBox(sMsg);
- 提问者评价
-
谢谢,还是要考虑的,因为操作多了,会影响效率,快一秒也是快。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
