vectors

Feb 22, 2017 at 8:42am
Hi,
when we have a vector, like below, can we consider always that cout<<*v.end()
will print 0 value? Can we find there some garbage value or not?

1
2
3
4
5
  int x{1,2,3,4,5}
  vector<int>v(x, x+5);
  cout<<*v.end();
  vector<int>v1(7);
  cout<<*v1.end();
Feb 22, 2017 at 9:12am
can we consider always that cout<<*v.end()
will print 0 value?
end() returns [a kind of] pointer beyond the end of the vector. It will lead to undefined behavior to dereference this pointer.

Can we find there some garbage value or not?
Yes.
Feb 22, 2017 at 10:44am
Use rbegin(), crbegin() for iterator access to the last element or back() for direct access to the last element of the vector:
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::cout << *(v.rbegin()) << "\n";
    std::cout << *(v.crbegin()) << "\n";
    std::cout << v.back() << "\n";
}
Topic archived. No new replies allowed.