c++ - 使用C++标准库,复制算法

标签 c++ algorithm tree copy

我正在尝试学习 C++ 中的标准库,并且正在尝试运行我的代码,但我无法成功。我忘记了什么以及我需要在我的类“Class”中添加什么才能使程序正常运行?

    #include <iostream>
    #include <vector>
    #include <list>
    #include <algorithm>
    #include <iterator>
    using namespace std;

    class Class {
    public:
      Class (int ii, double dd ) : ival(ii)  { dval = new double; *dval = dd; }
      ~Class() { delete dval; }
    private:
      int ival;
      double *dval;
    };

    int main()
    {

      vector<Class> vec;
      list<Class> list;
      vec.push_back( Class(1, 2.2) );
      vec.push_back( Class(2, 4.3) );
      vec.push_back( Class(3, 5.7) );
      ostream_iterator<const Class> classout(cout,"\n");
      copy( vec.begin(), vec.end(), classout );
    }

我基本上是在尝试理解和使用复制算法:

    template
      OutputIterator copy ( InputIterator first, InputIterator last, 
                            OutputIterator result )
    {
      while (first!=last) *result++ = *first++;
      return result;
    }

最佳答案

std::ostream_iterator使用插入运算符 <<将对象插入到输出流中。您必须提供这样的运算符。使用成员函数的示例实现:

class Class {
public:
  Class (int ii, double dd ) : ival(ii)  { dval = new double; *dval = dd; }
  ~Class() { delete dval; }
  void print(std::ostream &stream) const {
    stream << ival << ' ' << *dval;
  }
private:
  int ival;
  double *dval;
};

std::ostream& operator<< (std::ostream &stream, const Class &arg) {
  arg.print(stream);
  return stream;
}

作为替代方案,您还可以通过将其设为 friend 来实现它并且不创建成员函数。

关于c++ - 使用C++标准库,复制算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16748844/

相关文章:

c++ - 特定模板类型的功能特化

algorithm - 查找图中的所有关键节点集

PHP 嵌套文件树

python - 在列表中搜索一对整数的算法

Haskell Recursive HashMap 任意深度的数据结构

Java序列化包含许多空节点的N叉树

c++ - Qt - MDI Child 未正确关闭

c++ - 将矩阵传递给函数的问题

c++ - 我的 SDL2 应用仅在第一次键盘输入后出现严重延迟

java - 当常数未知时在 O(n) 和 O(n^2) 之间选择正确的算法