My question can be split into two parts:
- Is there any advantage in using a shorter integer variable (e.g. short or unsigned char) to loop over array (or stl container) indexes; and
- What are the advantages (if any) of using iterators with stl containers.
Code example for problem 1:
const size_t a=100000000;
const unsigned char b=5;
float array[a][b];
for (size_t j=0; j<a; ++j)
  for (unsigned char i=0; i<b; ++i)
    std::cout << array[j][i] << std::endl;
Does using unsigned char in the i-loop save me anything? Does array[j][i] implicitly cast i into a size_t?
Code example for problem 2:
vector<float> a(1000,0.);
vector<float> b(a);
for (size_t i=0; i<a.size(); ++i)
  cout << a[i] << endl;
for (vector<float>::iterator it=b.begin(); it!=b.end(); ++it)
  cout << *it << endl;
Is there an advantage in using the iterator approach? If not in this case, then when? And Why?
Bonus question:
In for (size_t i=0; i<a.size(); ++i), is a.size() re-evaluated every time? Do I win anything by getting the size first?
const size_t size = a.size();
for (size_t i=0; i<size; ++i)
Does std::vector simply return the value of a member variable when I call vector::size() or does it do something more elaborate?
