On Jul 31, 8:44 am, Neelesh Bodas <neelesh.bo...@gmail.com> wrote:
> On Jul 31, 8:23 am, "pwalker" <pwal...@nospam.com> wrote:
>
>
>
> > Hi everyone,
>
> > I am trying to get my head around iterators used on vectors. Let's take the
> > code below:
>
> > -------------
> > std::vector<int> v1;
> > std::vector<int> v2;
>
> > v1.push_back( 1 );
> > v1.push_back( 2 );
> > v1.push_back( 3 );
>
> > v2.push_back( 10 );
> > v2.push_back( 20 );
> > v2.push_back( 30 );
>
> > v1.insert(v1.end(), v2.begin(), v2.begin());
>
> > for(int j = 0; j < v1.size(); j++)
> > std::cout << v1[j] << " ";
> > -------------
>
> > I'm confused why we dont get the output 1 2 3 10
>
> > Doesn't the insert method insert to the back of v1 everything between
> > v2.begin() and v2.begin(), which is namely 10?
>
> > I realise that to get the desired result I need to instead use
> > v1.insert(v1.end(), v2.begin(), v2.begin()+1) but i fail to understand the
> > logic in this.
>
> In very simple terms, the version of vector::insert that you have used
> takes 3 parameters:
> param1: The position in vector where the insertion should take place
> param2: The position of the first element in the range of elements to
> be inserted
> param3: The position of first element beyond the range of the elements
> to be inserted.
>
> In other words, for the insertion, the half-open interval is used :
> [param2, param3)
>
> -N
Hi,
you need to have this
v1.insert(v1.end(), v2.begin(), v2.begin()+1);
instead of
v1.insert(v1.end(), v2.begin(), v2.begin());
to get the output 1 2 3 10
Thanks
|