假设有一个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,仅仅通过切换到第一种方法,我设法使所有案例都通过了,我是否错过了一些区分它们的东西,或者这只是一个巧合(因为它们的运行时间之间的实际差异是微小的,仅在极限的另一侧)。我什么都找不到,所以如果您有任何链接或见解,请分享。
答案 0 :(得分:6)
这会将变量从矢量复制到t:
for(int t: vec)
{
/* std::cout << t; ... */
}
对于int
,我认为这没有太大区别。
但是,如果您正在使用带有复制构造函数的类,则可以尝试使用引用:
for(int& t: vec)
{
/* std::cout << t; ... */
}
如果不修改变量,请使用const int&