【发布时间】:2019-01-31 10:07:19
【问题描述】:
假设有一个 stl 容器,为简单起见,我将使用声明为的向量
得到答案后,我意识到这是因为我实际上并没有迭代int,而是自定义数据结构模板T,只是进行了编辑,以便将来有人可能会发现它更容易理解。
std::vector <T> vec;
现在有两种常用的方法来迭代它。
1.
for(std::vector<T>::iterator it = vec.begin(); it != vec.end(); ++it)
{
/* std::cout << *it; ... */
}
2.
for(T t: vec)
{
/* std::cout << t; ... */
}
现在我一直认为这两种方法在底层或多或少是相同的,并且应该具有相似的运行时间,但最近在hackerearth 上的比赛中,第二个方法(我通常的 Goto)在最后一个测试用例中给出了 TLE,并且只是通过切换到第一种方法,我设法让所有案例都通过了,我是否错过了区分它们的东西,或者这只是一个巧合(因为它们的运行时间之间的实际差异很小,只是在限制的另一边)。我找不到任何东西,所以如果您有任何链接或见解,请分享。
【问题讨论】:
-
你没有迭代
ints,是吗? -
如果你复制了一个很大的结构,当然这不一样。
-
for(C c: vec)和for(/*const*/C& c: vec)有区别,前者是copy,后者是reference。