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

标签 c++ stl iterator

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

相关文章:

javascript - 中断递归函数

c++ - 为什么 std::atomic<T>::operator= 应该返回一个值而不是引用?

c++ - 在 QJsonArray 中追加 QJsonObjects

c++ - 所有n个矩形的交集面积

c++ - 防止在 STL 容器中释放内存

c++ - 如何遍历 map vector 中的 map ?

c++ - 是否可以使用 boost::bind 来有效地连接函数?

c++ - unordered_set 通过地址传递

c++ - 指向 C++ 字符串的指针

c++ - 如何在迭代器的构造函数中设置默认值? C++