Когда вы используете std::vector<int>
, гарантируется, что все элементы создаются в непрерывной памяти.Таким образом, когда вы пишете &v[0]
, он возвращает указатель на первый элемент, и из этого вы можете перейти к следующему элементу, написав &v[0]+1
и т. Д.
Кстати, если вы хотитечтобы пройти через все элементы или часть элементов, лучший интерфейс для bar
будет выглядеть так:
void bar(int *begin, int *end)
{
for ( ; begin != end; ++begin)
{
//code
}
}
Так что вы можете позвонить так:
bar(&foo[0], &foo[0] + foo.size());//process all elements
bar(&foo[0], &foo[0] + foo.size()/2);//process first half elements
bar(&foo[0], &foo[0] + N); //process first N elements(assumingN <=foo.size())
bar(&foo[0]+foo.size()/2, &foo[0]+foo.size());//process second half elements