【发布时间】:2011-01-13 02:51:51
【问题描述】:
我在这里和其他地方读过,在使用索引迭代 std::vector 时,您应该:
std::vector <int> x(20,1);
for (std::vector<int>::size_type i = 0; i < x.size(); i++){
x[i]+=3;
}
但是如果你要迭代两个不同类型的向量呢:
std::vector <int> x(20,1);
std::vector <double> y(20,1.0);
for (std::vector<int>::size_type i = 0; i < x.size(); i++){
x[i]+=3;
y[i]+=3.0;
}
是否可以假设
std::vector<int>::size_type
与
属于同一类型std::vector<double>::size_type
?
只使用 std::size_t 是否安全?
谢谢。
【问题讨论】:
-
如果你被教导过这样的迭代,那么你被教导错了。除了
i++任何体面的编译器都应该优化为++i之外,您仍然在循环的每一轮调用x.size(),如果它不平凡且不是内联是浪费的。 -
@Matthieu,只是一个快速而肮脏的例子来说明我的问题。我也应该使用迭代器而不是按索引来做。