迭代多个std :: vector

Mar*_*ark 10 c++ iterator stl

我在这里和其他地方读过,当你使用索引迭代std :: vector时,你应该:

std::vector <int> x(20,1);
for (std::vector<int>::size_type i = 0; i < x.size(); i++){
  x[i]+=3;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您正在迭代两个不同类型的向量,那该怎么办:

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;
}
Run Code Online (Sandbox Code Playgroud)

假设这样做是否安全

std::vector<int>::size_type

与...的类型相同

std::vector<double>::size_type
Run Code Online (Sandbox Code Playgroud)

使用std :: size_t会安全吗?

谢谢.

Jer*_*fin 7

是的,几乎任何实际目的,你都可以使用std :: size_t.虽然有(一种)意图,不同的容器可以使用不同的类型的大小,它仍然基本上保证(至少对于标准容器)size_type与size_t相同.

或者,您可以考虑使用算法,例如:

std::transform(x.begin(), x.end(), x.begin(), std::bind2nd(std::plus<int>(), 3));
std::transform(y.begin(), y.end(), y.begin(), std::bind2nd(std::plus<double>(), 3.0));
Run Code Online (Sandbox Code Playgroud)