【发布时间】:2014-09-24 17:18:19
【问题描述】:
假设我想按顺序访问 C++ 容器中的所有元素,哪种方式最有效?我在以下示例中说明了我的问题:
std::vector<int> abc;
abc.push_back(3);
abc.push_back(4);
...
...
for(int i=0; i<abc.size(); i++)
{
abc[i];
}
std::vector<int>::iterator it = abc.begin();
std::vector<int>::iterator itEnd = abc.end();
while(it != itEnd)
{
(*it);
it++;
}
如您所见,在这个例子中,使用了两种方法来访问 C++ 容器中的元素,所以很自然的问题是哪一种更有效。谢谢。
【问题讨论】:
-
询问你的编译器。
-
您是否想为您的应用程序选择一个以更快地运行?如果是这样,请选择在代码中看起来更好的那个,在看到差异之前不要担心速度。
-
对于线性遍历整个容器,对于向量,它们是相同的。对于其他数据结构,迭代器将至少与其他方式一样快。这取决于数据结构。
-
@NeilKirk 除非你不听
-
@Manu343726 我严重怀疑它。对于编译器来说,深入观察
size()以使其意识到它正在处理一个经典的数组循环并不是一件容易的事。在大多数情况下,至少在我测量过的情况下,在循环中调用size肯定会使他的第一个循环比第二个循环慢(他在循环外调用end)。
标签: c++