Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterate Multiple std::vector

Tags:

c++

iterator

stl

I've read here and other places that when iterating a std::vector using indexes you should:

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

But what if you are iterating two vectors of different types:

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;
}

Is it safe to assume that

std::vector<int>::size_type

is of the same type as

std::vector<double>::size_type

?

Would it be safe just to use std::size_t?

like image 899
Mark Avatar asked Feb 04 '10 14:02

Mark


2 Answers

Yes, for almost any practical purpose, you can just use std::size_t. Though there was (sort of) an intent that different containers could use different types for their sizes, it's still basically guaranteed that (at least for standard containers) size_type is the same as size_t.

Alternatively, you could consider using an algorithm, something like:

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));
like image 72
Jerry Coffin Avatar answered Oct 17 '22 14:10

Jerry Coffin


In general, C++ standard doesn't give such guarantees: neither equality of size_types for differently parametrized containers, nor equality to size_t.

like image 38
Alexander Poluektov Avatar answered Oct 17 '22 16:10

Alexander Poluektov