mar*_*nus 3 c++ performance for-loop conditional-statements
关于循环,我有一个(愚蠢的?)C/C++问题:
for (size_t i = 0; i < std::distance(begin, end); ++i) {
a.push_back(i);
}
Run Code Online (Sandbox Code Playgroud)
begin
并且end
是两个迭代器.我的问题是,是否std::distance(begin, end)
为循环中的每个元素计算?或者使用此版本更好:
size_t dist = std::distance(begin, end);
for (size_t i = 0; i < dist; ++i) {
a.push_back(i);
}
Run Code Online (Sandbox Code Playgroud)
是的。第二个版本更好。
对于第一个版本,如果容器类型a
是std::vector
、和 begin
,并且end
是 的迭代器a
,那么该push_back
操作可能会导致调整向量的大小,这反过来会使begin
和end
迭代器失效,并且在下一次迭代中使用它们来计算距离将调用未定义的行为。在这种情况下,第二个不仅更好,而且定义明确。
归档时间: |
|
查看次数: |
2421 次 |
最近记录: |