gpt4 book ai didi

c++ - 我应该通过迭代器还是通过访问运算符来迭代 vector ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:13 26 4
gpt4 key购买 nike

我有一个 vector 声明为

std::vector<int> MyVector;
MyVector.push_back(5);
MyVector.push_back(6);
MyVector.push_back(7);

我应该如何在 for 循环中使用它?

通过迭代器对其进行迭代?

for (std::vector<int>::iterator it=MyVector.begin(); it!=MyVector.end(); ++it)
{
std::cout << "Vector element (*it): " << *it << std::endl;
}

还是通过它的访问迭代器?

for (std::vector<int>::size_type i=0; i<MyVector.size(); i++)
{
std::cout << "Vector element (i) : " << MyVector.at(i) << std::endl;
}

在我在互联网上找到的示例中,它们都被使用了。它们中的一个是否在所有条件下都优于另一个?如果不是,我什么时候应该选择其中之一而不是另一个?

最佳答案

第一种格式是更通用的格式,用于遍历标准库容器,因此更加通用和直观。如果您需要更改容器,那么此迭代代码不会受到影响。它适用于每个标准库容器类型,因此它为您提供了更通用的代码。

在第二种格式中,std::vector::at() 每次在每次迭代中被调用时都会检查边界,因此它可能对有点不利性能。这种开销不存在于第一种格式中,因为不涉及边界检查。请注意,使用 operator[] 也是如此。
请注意,除非您正在处理大量数据,否则性能滞后并不像您会注意到的那么多。

关于c++ - 我应该通过迭代器还是通过访问运算符来迭代 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12560796/

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