C++在不同类型的向量上具有相同的功能

zoo*_*ini 1 c++ types function vector

我有一个非常简单的功能,打印vector<double>到cout.我有相同的功能vector<int>.我可以用一个函数替换它们,如果可能的话,可以采用任何类型的向量吗?

void printv(vector<double> vec)
{
    copy(vec.begin(),vec.end(), ostream_iterator<double>(cout," "));
    cout << endl;
}

void printv(vector<int> vec)
{
    copy(vec.begin(),vec.end(), ostream_iterator<int>(cout," "));
    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

如果有人建议专门用于打印任何类型的矢量的解决方案,我有一个将向量保存到文件的功能相同的问题,所以关键是一般问题,而不是特别与打印有关.

提前致谢!

Bar*_*icz 6

当然.这就是C++的意义所在.

template<typename T>
void printv(vector<T> const& vec)
{
    copy(vec.begin(), vec.end(), ostream_iterator<T>(cout," "));
    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

只要T是"输出可流动"就可以工作.

注意:我已添加const&到签名中以避免复制.


现在,您可以更进一步:

template<typename Container>
void print(Container const& c)
{
    using std::begin;
    using std::end;
    using std::copy;

    copy(begin(c), end(c), std::ostream_iterator<typename Container::value_type>(cout, " "));
    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

使其适用于所有标准容器,而不仅仅是矢量.

  • @ 0d0a为什么要依靠威力?在许多情况下,它不会.(事实上​​我想不出任何不会复制的情况) (4认同)
  • @ 0d0a你能举例说明一个副本会被删除吗? (3认同)