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



http://zhidao.baidu.com/link?url=laqSBrv-cGVs-nNwI4kjObGJ2UacUBf2gCBCbnwT-wC-UhpZ-UvKysB0DfzOWyan_srsTLYbJGEgaw1ET3uoTK



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

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);
提问者评价
谢谢,还是要考虑的,因为操作多了,会影响效率,快一秒也是快。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值