简体   繁体   中英

c++ iterator with template

I have a problem about how to use iterator under the template manner.
Here is an example I am trying to do, the problem is that, inside the for loop how can I initial the iterator pp ?

I have read a similar question, but I cannot fully understand that since I am a beginner.
What should the iterator type be in this C++ template?
Can anyone help and also provide some simple explanation?

#include <iostream>
#include <vector>

template <class T>
void my_print(std::vector<T> input){
    for(std::vector<T>::iterator pp = input.begin(); pp != input.end(); ++pp)
        std::cout << *pp << "\n";
}
int main(int argc,char* argv[]){
    std::vector<int> aa(10,9);
    my_print(aa);

    return 0;
}

error message I got:
'std::vector::iterator' is parsed as a non-type, but instantiation yields a type

Add a typename before the iterator

#include <iostream>
#include <vector>

template <class T>
void my_print(std::vector<T> input)
{
    for (typename std::vector<T>::iterator pp = input.begin(); pp != input.end(); ++pp)
    {
        std::cout << *pp << "\n";
    }
}
int main(int argc, char* argv[])
{
    std::vector<int> aa(10, 9);
    my_print(aa);

    return 0;
}

source: http://www.daniweb.com/software-development/cpp/threads/187603/template-function-vector-iterator-wont-compile

Like Dieter says, newer versions of gcc will pretty much tell you where typename is needed:

error: need 'typename' before 'std::vector<T>::iterator' 
       because 'std::vector<T>' is a dependent scope

Simple fix:

for(typename std::vector<T>::iterator pp = input.begin(); 
          pp != input.end(); ++pp)

Here is an explanation Error with T::iterator, where template parameter T might be vector<int> or list<int>

Before a qualified dependent type, you need typename. Without typename, there is a C++ parsing rule that says that qualified dependent names should be parsed as non-types even if it leads to a syntax error.

For a more comprehensive explanation, check out Why is the keyword "typename" needed before qualified dependent names, and not before qualified independent names?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM