c++ - 索引 vs 迭代器——哪个效率更高?

标签 c++

我想知道如果我想遍历一个 vector ,下面哪一种方法会更有效。第一个选项:

int i;
for(i = 0; i<vector.size(); i++)
{
cout << vector[i];
}

第二个选项:

vector<type>::iterator it;
for(it = vector.begin(); it != vector.end(); it++)
{
cout << *it;
}

最佳答案

通往 hell 的道路是用善意铺成的;或者在我们的例子中是过早的优化。编译器所做的优化应该使每个循环都等效。让编译器为您工作,并在这种情况下专注于可读性和可维护性。正如其他人指出的那样,std::cout是您示例中的瓶颈,而不是循环本身。

如果您使用的是 C++11 或更高版本,则 range-based for loops非常易于使用和可读性。

for (const auto & element : myVector)
{
    cout << element;
}

否则,如果我需要知道元素的位置,我发现使用 vector::size() 会更容易。和指数方法。如果我不关心那个,那么我几乎总是使用 vector<type>::iterator .在我看来,这两种方法的可读性是等效的,迭代器是所有各种 STL 容器的更标准方法。

关于c++ - 索引 vs 迭代器——哪个效率更高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48449775/

相关文章:

c++ - 将OpenSceneGraph程序转移到网站上

C++ - 运算符删除混淆

c++ - 尝试使用 C++ 中的函数填充数组

c++ - 在 C++17 中没有从 std::string 到 std::string_view 的隐式转换(在 std::experimental::basic_string_view 中)

c++ - 将 dll 库导入 CodeBlocks 链接器时遇到问题

c++ - 覆盖数组索引运算符

c++ - 我无法理解下面文本中最后一段的含义

c++ - 像 C++ 一样支持 NSArray(奇怪的代码示例)

c++ - 在 Visual Studio 中快速插入 include guard 的方法

c++ - 在 Boost 中找不到共享库 (Linux Mint)