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
?
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));
In general, C++ standard doesn't give such guarantees: neither equality of size_types for differently parametrized containers, nor equality to size_t.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With