入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

C++:vector<vector<int> > a, int b[M][L].两种方式,那种效率高。 注:都采用下标寻址方式。

创建时间:2015-07-14 投稿人: 浏览次数:1064
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);
提问者评价
谢谢,还是要考虑的,因为操作多了,会影响效率,快一秒也是快。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。