C++:vector<vector<int> > a, int b[M][L].两种方式,那种效率高。 注...

发布网友 发布时间: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就不是了。。。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com