我想出了以下几点:
template <typename T> inline void printcontainer( std::vector<T> container )
{
for( auto it = container.begin(); it != container.end(); it++ )
{
std::cout << *it << std::endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<int> v;
v.push_back(5);
v.push_back(4);
v.push_back(3);
printcontainer(v);
return 0;
}
(感到抱歉push_backs
,Visual Studio 不接受初始化列表...呃!!)
现在这个功能仅限于std::vector
,我怎样才能做到这样我就可以传递其他容器,比如std::list
数组等...
只是不要在容器存储的类型上进行模板化,而是在容器本身的类型上进行模板化:
template <typename Container>
inline void printcontainer(const Container &container)
请注意,我将参数更改为const
参考以避免不必要的复制。
您可以使用非成员将打印函数推广到 C 数组std::begin
and std::end
或者通过使用基于范围for loop http://en.cppreference.com/w/cpp/language/range-for:
template <typename Container>
inline void printcontainer(const Container &container) {
for (const auto &v : container)
std::cout << v << "\n";
}
OT 备注:您可能不需要inline
here.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)