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];