声明函数模板的语法

syntax for declaring a function template

本文关键字:语法 函数模板 声明      更新时间:2023-10-16

我正在尝试创建一个模板函数,该函数接受任何类型T(现在是原始类型)的矢量参数,并打印出其内容:

template<class T>
void displayContents(const vector<T>& data)
{
    vector<T>::const_iterator i;
    i=data.begin();
    for( ; i!=data.end(); i++){
        cout<<*i<endl;
    }
}

错误信息是:

在函数'void displayContents(const std::vector>&)'中:错误:在'i'之前预期';'错误:'i'未在此范围内声明===构建完成:2个错误,0个警告===

我是否忽略了语法错误?

尝试如下:

  typename vector<T>::const_iterator i;

如果您的目标是输出每个元素,则不应该将自己限制为向量。惯用的通用解决方案是传递两个迭代器:

template<typename ForwardIterator>
void display_contents(ForwardIterator begin, ForwardIterator end)
{
    for (ForwardIterator it = begin; it != end; ++it)
    {
        std::cout << *it << 'n';
    }
}

然后你可以将模板用于vector、set和几乎所有其他容器:

int main()
{
    std::vector<int> a {2, 3, 5, 7};
    display_contents(a.begin(), a.end());
    std::set<int> b {11, 13, 17, 19};
    display_contents(b.begin(), b.end());
}