【发布时间】:2014-02-20 20:26:23
【问题描述】:
vector<int> my_vector(10);
// A
for (size_t i = 0; i < my_vector.size(); i++) {
// Do stuff with my_vector[i]
}
//B
for (vector<int>::iterator it = my_vector.begin(); it != my_vector.end(); it++) {
// Do stuff with (*it)
}
//C
for (vector<int>::const_iterator it = my_vector.begin(); it != my_vector.end(); it++) {
// Do stuff with (*it)
}
请回答以下问题:
1) 如果我在循环中所做的事情改变了 my_vector 元素的值,那么使用 B 而不是 A 更有效吗?这里效率=更快的遍历。如果是,为什么?
2)如果不修改my_vector的元素,三者中最快的方法是什么?
【问题讨论】:
-
正如 Andrei Alexandrescu 所说,当谈到性能和速度时......“我应该衡量一下”。
-
您的程序是否不符合您的性能要求?你有没有分析和追踪到这个地方的瓶颈?
-
它们都具有相同的复杂性。我们能说的就这么多了。
-
@user3334441 '这只是一个理论问题' 所以就这一点(性能)提出理论问题是一件愚蠢的事情。这当然全部取决于您正在使用的目标平台(工具链和操作系统)。
-
@JasonC 我只是为了好风格而采用它,而不是通过微优化:如果我不需要副本,我就不需要!
标签: c++ iterator const-iterator