Re: Advancing Through std::vector
"Jorgen Grahn" wrote in message
news:slrnl31m36.2m9.grahn+nntp@frailea.sa.invalid...
On Wed, 2013-09-11, Mike Copeland wrote:
I have a std::vector of some size (I know I can get the size with =
the
.size() function, but that doesn't help my question here). I have =
logic
which processes "chunks" of this data, 20 at a time. Let's say that =
I
have 32 objects in the container, and my first "page" of data is =
1-20.
The next "chunk" can't be 20, and I obviously have to protect =
against
trying to access object(s) that don't exist. Normal incrementing of =
the
iterator (e.g. advance) or direct indexing don't seem to offer ways =
to
avoid accessing beyond the data set. That is, I can't find any STL
functions that give me ways to avoid problems here.
Yes, I could do some convoluted math that works with .size(), but =
if
I'm using an iterator and advance, the work seems messy and ugly. =
8<{{
So I asking here if there is some way to use/convert the iterator
position and apply it to see if it's "gone beyond" the container's =
data
set. Perhaps there's a function that returns an indicator, or maybe
someone who's dealt with this problems has a good solution. TIA
No worries. I'd just do something like this:
vector<Foo> v;
vector<Foo>::iterator a = v.begin();
while(a!=v.end()) {
vector<Foo>::iterator b = v.size()>20 ? a+20 : v.end();
Shouldn't that be something like
vector<Foo>::iterator b = v.end()-a >20 ? a+20 : v.end();
process(a, b);
a = b;
}