gpt4 book ai didi

c++ - 使用 typename 作为模板参数

转载 作者:太空宇宙 更新时间:2023-11-04 15:43:54 25 4
gpt4 key购买 nike

我正在尝试用 C++ 编写一个函数来打印 std 列表。对于模板函数,T 不能用作模板参数是真的吗?

template <typename T>
void printlist(list<T> a)
{
list<T>::iterator i;
for (i=a.begin(); i!=a.end(); ++i)
cout<<*i<<" ";
}

最佳答案

代码大部分是合法的。一些编译器可能会接受它...但是,按照以下方式编写它肯定可以工作(假设您定义了 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 替换为适当的元素类型即可。注意:该算法适用于任何序列。

关于c++ - 使用 typename 作为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19747423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com