发布网友 发布时间:2024-10-24 00:53
共3个回答
热心网友 时间:2024-11-02 14:34
肯定是第二种效率高,毕竟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);
热心网友 时间:2024-11-02 14:32
由实际情况而定,一般情况下是第一种效率高...
热心网友 时间:2024-11-02 14:36
应该是int b[M][L],b[i][L-1]与b[i+1][0]的地址是连续的,但a就不是了。。。