在C++中,对于所有容器类型,std :: end保证是O(1)吗?

use*_*490 7 c++

如果容器可能包含大量项目,从性能角度来看,应该写一个

for (auto p = std::begin(container); p != std::end(container); ++p) {...}
Run Code Online (Sandbox Code Playgroud)

或者应该在循环外访问容器的末端

const auto& theEnd = std::end(container);
for (auto p = std::begin(container); p != theEnd; ++p) {...}
Run Code Online (Sandbox Code Playgroud)

我只是想知道std::endO(1)是否适用于容器,如集合和列表以及向量.

Woj*_*wka 5

是的,end()所有容器的复杂性都是不变的.C++标准23.2.1中的表"容器要求"表示如下:

a.end()常量


Vla*_*cow 4

根据 C++ 标准表 96 中描述的容器要求,函数end()具有恒定的复杂性。