gpt4 book ai didi

c++ - 迭代 vector 和其他 STL 容器的样式之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 15:30:33 24 4
gpt4 key购买 nike

假设有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com