How to obtain iterator to beginning of inserted elements in list

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • JurgenvonOerthel@hotmail.com

    How to obtain iterator to beginning of inserted elements in list

    I want to replace one element in a list<stringby a list<stringand
    I need to obtain an iterator to the first element in the inserted
    list.
    In code:

    void replace_element _by_list(list<s tring&my_list,
    list<string>::i terator
    &iter_to_remove ,
    const list<string>
    &list_to_insert ) {
    list<string>::i terator next_iter = my_list.erase(i ter_to_remove);
    my_list.insert( next_iter, list_to_insert. begin(),
    list_to_insert. end());
    // Does 'iter_to_remove ' point to the first element of the inserted
    list, or is it invalid?
    }

    When I try this code I find that 'iter_to_remove ' indeed points to the
    first element of the inserted list. However, I'm wondering whether
    that is guaranteed.
  • Victor Bazarov

    #2
    Re: How to obtain iterator to beginning of inserted elements in list

    JurgenvonOerthe l@hotmail.com wrote:
    I want to replace one element in a list<stringby a list<stringand
    I need to obtain an iterator to the first element in the inserted
    list.
    In code:
    >
    void replace_element _by_list(list<s tring&my_list,
    list<string>::i terator
    &iter_to_remove ,
    const list<string>
    &list_to_insert ) {
    list<string>::i terator next_iter = my_list.erase(i ter_to_remove);
    Add
    list<string>::i terator prev_iter = next_iter;
    if (prev_iter == my_list.begin() )
    prev_iter = my_list.end();
    else
    --prev_iter;
    my_list.insert( next_iter, list_to_insert. begin(),
    list_to_insert. end());
    What does 'insert' return?
    // Does 'iter_to_remove ' point to the first element of the inserted
    list, or is it invalid?
    'iter_to_remove ' is invalid. However, you can return 'prev_iter' here.
    The catch, of course, is that if you're removing the very first element
    in the list, you'll get 'end()'.
    }
    >
    When I try this code I find that 'iter_to_remove ' indeed points to the
    first element of the inserted list. However, I'm wondering whether
    that is guaranteed.
    Nope.

    V
    --
    Please remove capital 'A's when replying by e-mail
    I do not respond to top-posted replies, please don't ask


    Comment

    • Abhishek Padmanabh

      #3
      Re: How to obtain iterator to beginning of inserted elements in list

      On Dec 7, 8:17 pm, JurgenvonOert.. .@hotmail.com wrote:
      I want to replace one element in a list<stringby a list<stringand
      I need to obtain an iterator to the first element in the inserted
      list.
      In code:
      >
      void replace_element _by_list(list<s tring&my_list,
      list<string>::i terator
      &iter_to_remove ,
      const list<string>
      &list_to_insert ) {
      list<string>::i terator next_iter = my_list.erase(i ter_to_remove);
      my_list.insert( next_iter, list_to_insert. begin(),
      list_to_insert. end());
      // Does 'iter_to_remove ' point to the first element of the inserted
      list, or is it invalid?
      >
      }
      >
      When I try this code I find that 'iter_to_remove ' indeed points to the
      first element of the inserted list. However, I'm wondering whether
      that is guaranteed.
      This is not guaranteed. It is invalid. You could, however, get the
      iterator to the first element of the inserted range as below:

      void replace_element _by_list(list<s tring&my_list,
      list<string>::i terator
      &iter_to_remove ,
      const list<string>
      &list_to_insert ) {
      list<string>::i terator next_iter = my_list.erase(i ter_to_remove);
      list<string>::i terator prev_to_next_it er = --next_iter;
      my_list.insert( next_iter, list_to_insert. begin(),
      list_to_insert. end());
      // Does 'iter_to_remove ' point to the first element of the inserted
      list, or is it invalid?
      iter_to_remove = ++prev_to_next_ iter;
      //iter_to_remove is guaranteed to point to the first element of the
      //inserted list/range
      }

      Comment

      • JurgenvonOerthel@hotmail.com

        #4
        Re: How to obtain iterator to beginning of inserted elements in list

        On Dec 7, 4:30 pm, "Victor Bazarov" <v.Abaza...@com Acast.netwrote:
        Add
        list<string>::i terator prev_iter = next_iter;
        if (prev_iter == my_list.begin() )
        prev_iter = my_list.end();
        else
        --prev_iter;
        I was afraid I would have to do something ugly like this.
        What does 'insert' return?
        That's my point: it returns void. I think it should return an iterator
        to the first inserted element. That's what 'insert' of a single
        element does.

        Comment

        Working...