我正在尝试学习 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/