c++ - Why does std::accumulate behave like this with standard arrays? -
I'm just coming in C ++ and I think I have handle pointer, but std: : Accumulate ()
has confused me.
Looking at the array:
int a [3] = {5, 6, 7};
I want to add values of the array to std :: accumulate ()
, so I give it an indicator for the first element, then the last, Then the initial value of the receiver.
std :: cached (a, a + 2, 0); Std :: deposits (& amp; a [0], & a [2], 0); Oh: None of these gives the sum of the first two elements: 11
. On the other hand, if the second argument is a nonsensical indicator, just outside the limit ...
std :: deposits (a, a + 3, 0); Std :: deposits (& amp; a [0], & a [3], 0); The correct value of
... 18
has been returned.
Can anyone please explain this? I know that I can not use simple arrays, but it's next to the point.
C ++ categories are defined [first, last]
, And all STL algorithms work that way. In this case, all the elements behind the std :: accumulate
defined class, starting with first
and without actually last
Ends denote it.
As such, calling it like std :: accumulate (a, a + 3, 0)
is really correct and calling it with std :: Is equal to (start (a), end (a), 0)
.
Also note that this is a typical exception to the pointer behind the last element, "There is no sign outside the allocated array".
Comments
Post a Comment