C++ 使用迭代或简单的循环计数器,哪个更快?

C++ 使用迭代或简单的循环计数器,哪个更快?,c++,optimization,vector,iteration,C++,Optimization,Vector,Iteration,可能重复: 假设一个名为numbers的std::vector,以下哪项更快 for (vector<int>::iterator i = numbers.begin(); i != numbers.end(); i++) cout << *i; for(向量::迭代器i=numbers.begin();i!=numbers.end();i++) cout任何差异都取决于硬件和编译器,因此您必须进行测量。我认为除了使用非优化编译器的外来硬件之外,没有什么显著的区

可能重复:

假设一个名为
numbers
std::vector
,以下哪项更快

for (vector<int>::iterator i = numbers.begin(); i != numbers.end(); i++)
  cout << *i;
for(向量::迭代器i=numbers.begin();i!=numbers.end();i++)

cout任何差异都取决于硬件和编译器,因此您必须进行测量。我认为除了使用非优化编译器的外来硬件之外,没有什么显著的区别


当然,IO可能远远超过循环开销。

这两者甚至不可比。前者在每个元素中循环,而后者在检查当前索引是否有效时循环(使用
at()
)。拿出支票,再次询问:

for (/* Not an int! Unsigned type: */ std::size_t i = 0; i < numbers.size(); i++)
    cout << numbers[i];
(/*不是int!无符号类型:*/std::size_t i=0;i
我不确定哪一个更快,但几乎可以肯定这是无关紧要的。到目前为止,cout将是这里的限制因素。如果将它们全部打印到终端上,您将不会生成显示速度差异的基准测试程序。我在我的系统上运行了类似的测试,发现
at()
是最慢的方法(at进行范围检查),迭代器更快,使用索引和
[]
是最快的方法。这可能取决于您的系统和编译器。由于
number.size()
返回一个无符号整数类型,我更喜欢
std::size\u t I=0。哦<代码>大小\u t
优于
int
无符号int
?我不知道。无论如何,谢谢@JonathanLingle size\t通常只是为了避免在比较
.size()
的有符号int与无符号结果时得到编译器警告。使用int也会限制您可以使用的容器的大小,但通常int的范围是足够的。
for (/* Not an int! Unsigned type: */ std::size_t i = 0; i < numbers.size(); i++)
    cout << numbers[i];