Код в основном легальными. Некоторые компиляторы могут принимать это ... однако, писать его следующим образом обязательно работать (если у вас есть using namespace std
определено):
template <typename T>
void printlist(list<T> a)
{
typename list<T>::iterator i;
for (i=a.begin(); i!=a.end(); ++i)
cout<<*i<<" ";
}
Для повышения эффективности, вы должны пройти в списке в качестве константной ссылке:
template <typename T>
void printlist(const list<T>& a)
{
typename list<T>::const_iterator i;
for (i=a.begin(); i!=a.end(); ++i)
cout<<*i<<" ";
}
Однако существует алгоритм STL, который уже делает это за вас. Предполагая, что вы хотите распечатать список целых чисел, просто написать:
copy(a.begin(), a.end(), ostream_iterator<int>(cout, " "));
Просто замените int
с соответствующим типом элемента. Примечание. Этот алгоритм работает в любой последовательности.
Я не уверен, но вы пытались его построить? – hamon
Я не уверен, что именно вы имеете в виду, но вам нужно 'typename' перед' list :: iterator', а потом все хорошо. –
jrok
http://stackoverflow.com/questions/610245/where-and-why-do-i-have-to-put-the-template-and-typename-keywords –