list<string> insertion fails

Discussion in 'C++' started by banangroda, Jul 29, 2008.

  1. banangroda

    banangroda Guest

    Compilation fails at "line.insert(line.end(), x.begin(), i);" and I
    can't figure out why. Here is the code:

    /*
    5-1. Design and implement a program to produce a permuted index. A
    permuted
    index is one in which each phrase is indexed by every word in the
    phrase.
    */

    #include <cctype>
    #include <iostream>
    #include <string>
    #include <list>

    using std::cin;
    using std::cout;
    using std::isspace;
    using std::string;
    using std::list;

    int main() {
    string x;
    list<list<string> > indexes;
    while (getline(cin, x)) {
    string::const_iterator i = x.begin();
    list<string> line;
    while (i < x.end()) {
    while (i < x.end() && isspace(*i)) x.erase(*(i++));
    while (i < x.end() && !isspace(*i)) ++i;
    line.insert(line.end(), x.begin(), i);
    }
    indexes.push_back(line);
    }
    for (list<list<string> >::const_iterator i = indexes.begin();
    i != indexes.end(); ++i) {
    for (list<string>::const_iterator j = i->begin(); j != i->end(); +
    +j)
    cout << *j << std::endl;
    }
    return 0;
    }

    ... and here is the compilation error:
    g++ 5-1.cpp -o 5-1 -Wall
    5-1.cpp: In function ‘int main()’:
    5-1.cpp:26: error: no matching function for call to
    ‘std::list<std::basic_string<char, std::char_traits<char>,
    std::allocator<char> >, std::allocator<std::basic_string<char,
    std::char_traits<char>, std::allocator<char> > >
    >::insert(std::_List_iterator<std::basic_string<char,

    std::char_traits<char>, std::allocator<char> > >,
    __gnu_cxx::__normal_iterator<char*, std::basic_string<char,
    std::char_traits<char>, std::allocator<char> > >,
    __gnu_cxx::__normal_iterator<const char*, std::basic_string<char,
    std::char_traits<char>, std::allocator<char> > >&)’
    /usr/include/c++/4.2/bits/list.tcc:86: note: candidates are: typename
    std::list<_Tp, _Alloc>::iterator std::list<_Tp,
    _Alloc>::insert(std::_List_iterator<_Tp>, const _Tp&) [with _Tp =
    std::basic_string<char, std::char_traits<char>, std::allocator<char>
    >, _Alloc = std::allocator<std::basic_string<char,

    std::char_traits<char>, std::allocator<char> > >]
    /usr/include/c++/4.2/bits/stl_list.h:808: note: void
    std::list<_Tp, _Alloc>::insert(std::_List_iterator<_Tp>, size_t, const
    _Tp&) [with _Tp = std::basic_string<char, std::char_traits<char>,
    std::allocator<char> >, _Alloc =
    std::allocator<std::basic_string<char, std::char_traits<char>,
    std::allocator<char> > >]
    make: *** [5-1] Error 1
     
    banangroda, Jul 29, 2008
    #1
    1. Advertising

  2. banangroda

    banangroda Guest

    On Jul 29, 8:17 pm, Victor Bazarov <> wrote:
    > banangroda wrote:
    > > Compilation fails at "line.insert(line.end(), x.begin(), i);" and I
    > > can't figure out why. Here is the code:

    >
    > > /*
    > >    5-1. Design and implement a program to produce a permuted index. A
    > > permuted
    > >    index is one in which each phrase is indexed by every word in the
    > > phrase.
    > > */

    >
    > > #include <cctype>
    > > #include <iostream>
    > > #include <string>
    > > #include <list>

    >
    > > using std::cin;
    > > using std::cout;
    > > using std::isspace;
    > > using std::string;
    > > using std::list;

    >
    > > int main() {
    > >    string x;
    > >    list<list<string> > indexes;
    > >    while (getline(cin, x)) {
    > >            string::const_iterator i = x.begin();
    > >            list<string> line;
    > >            while (i < x.end()) {
    > >                    while (i < x.end() && isspace(*i)) x.erase(*(i++));
    > >                    while (i < x.end() && !isspace(*i)) ++i;
    > >                    line.insert(line.end(), x.begin(), i);
    > >            }
    > >            indexes.push_back(line);
    > >    }
    > >    for (list<list<string> >::const_iterator i = indexes.begin();
    > >    i != indexes.end(); ++i) {
    > >            for (list<string>::const_iterator j = i->begin(); j != i->end(); +
    > > +j)
    > >                    cout << *j << std::endl;
    > >    }
    > >    return 0;
    > > }
    > > [..]

    >
    > Your 'line' is a list of strings.  Your 'x.begin()' is an iterator in a
    > string.  If you intended to insert the entire 'x' string into your list
    > of strings (append), then you probably wanted to do
    >
    >     line.insert(line.end(), x);
    >
    > If not, describe to us *what it is you're trying to accomplish*.
    >
    > V
    > --
    > Please remove capital 'A's when replying by e-mail
    > I do not respond to top-posted replies, please don't ask


    I want to insert the contents of 'x' from its start through 'i' into
    'line'.
     
    banangroda, Jul 29, 2008
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. John N.
    Replies:
    5
    Views:
    570
    John N.
    Dec 31, 2003
  2. Earl Eiland
    Replies:
    3
    Views:
    546
    Peter Hansen
    May 16, 2005
  3. Trent Mick
    Replies:
    0
    Views:
    498
    Trent Mick
    May 16, 2005
  4. Randy Bush

    list insertion

    Randy Bush, Aug 24, 2005, in forum: Python
    Replies:
    6
    Views:
    370
    Randy Bush
    Aug 28, 2005
  5. Java Newbie

    Insertion Sort on a linked list

    Java Newbie, Feb 4, 2007, in forum: Java
    Replies:
    2
    Views:
    3,442
    Mark Space
    Feb 9, 2007
Loading...

Share This Page