假设有一个 STL 容器,为了简单起见,我将使用声明为的 vector
得到答案后我意识到这是因为我实际上并没有遍历 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 并且只是通过切换到第一种方法,我设法让所有案例都通过了,我是否错过了它们之间的区别,或者这只是一个巧合(因为它们的运行时间之间的实际差异很小,只是在限制的不同一侧)。我找不到任何东西,所以如果您有任何链接或见解,请分享。
最佳答案
这会将变量从 vector 复制到 t:
for(int t: vec)
{
/* std::cout << t; ... */
}
对于int
,我认为不会有太大区别。
但是如果你正在使用带有复制构造函数的类,...你可以尝试使用引用:
for(int& t: vec)
{
/* std::cout << t; ... */
}
如果它不修改变量,请使用 const int&
关于c++ - 迭代 vector 和其他 STL 容器的样式之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54458061/