我可以用模板处理迭代器吗?

时间:2013-11-23 00:12:59

标签: c++ vector iterator

我是新手,从“C ++ Primer 5th edition”,p110开始练习,其中: 编写一个程序来打印矢量的大小和内容,如下所示。

(a)vector<int> v1;

(b)vector<int> v2(10);

(f)vector<string> v6{10};

(g)vector<string> v7{10, "hi"};

我可以使用模板函数处理上面的字符串和int向量吗? 我写了一个这样的函数:

    template<class t>
    void check_vector(vector<t> *_v)
    {
        if(_v->begin() == _v->end())
        {
            cout << "the vector is empty\n";
        }
        else
        {
            int i=0;

            for(vector<t>::iterator it = _v->begin(); it != _v->end(); it++)   //error.
            {
                cout << *it;
                i++;
            }
            cout << "\nthe size is : "
                   <<i
                     <<"\n";
        }
    }

在'std :: vector :: iterator'之前生成的错误是 need'typename',因为'std :: vector'是一个依赖范围。

有可能这样做吗? 如果是这样,我该如何修复代码? THX。

1 个答案:

答案 0 :(得分:2)

编译器非常清楚地告诉你写

for(typename vector<t>::iterator it = _v->begin(); it != _v->end(); it++)
 // ^^^^^^^^

修复它。你试过吗?

至少

typedef typename vector<t>::iterator It;
for(It it = _v->begin(); it != _v->end(); it++)

应该有用。