Dr Negative - 1 month ago 24
C++ Question

Okay, a small problem with, hopefully, a quick, simple solution.

In my school textbook, in a chapter about the STL, it gives a simple sample program to input for using lists and for using an iterator with a list, like so:

``````#include <list>
#include <iostream>
#include <string>
using namespace std;

int main()
{
list<int> myIntList;

// Insert to the front of the list.
myIntList.push_front(4);
myIntList.push_front(3);
myIntList.push_front(2);
myIntList.push_front(1);

// Insert to the back of the list.
myIntList.push_back(5);
myIntList.push_back(7);
myIntList.push_back(8);
myIntList.push_back(9);

// Forgot to add 6 to the list, insert before 7.  But first
// we must get an iterator that refers to the position
// we want to insert 6 at.  So do a quick linear search
// of the list to find that position.
list<int>::iterator i = 0;
for( i = myIntList.begin(); i != myIntList.end(); ++i )
if( *i == 7 ) break;

// Insert 6 were 7 is (the iterator I refers to the position
// that 7 is located.  This does not overwrite 7; rather it
// inserts 6 between 5 and 7.
myIntList.insert(i, 6);

// Print the list to the console window.
for( i = myIntList.begin(); i != myIntList.end(); ++i )
cout << *i << " ";   cout << endl;
}
``````

Now, at the line that says

``````list<int>::iterator i = 0;
``````

I get an error in VS 2015 that says:

``````no suitable constructor exists to convert from"int" to "std::_List_iterator<std::_List_val<std::_List simple_types<int>>>"
``````

What is the problem with the code presented, what is the solution, and why is this a problem to begin with? <-(I'll even settle with a simple grammatical error).

The value `0` may not be a valid value for an iterator. Try either removing the assignment or assigning the iterator to `myIntList.begin()`.
The iterator may not be able to be treated as an index, like with a `vector` or array. Usually linked lists are not accessed by index; you have to traverse from the beginning.