如何为std::ostream_iterator设置前缀?
How to set a prefix for std::ostream_iterator?
我想做这样的事情:
std::ofstream ch("ch_out.txt");
std::ostream_iterator< cgal_class > out( "p ", ch, "\n" );
这可能吗?我担心,因为我的研究说不,希望它被打破了。 :)
目标是将CGAL生成的凸包点写入文件中,如下所示:
p 2 0
p 0 0
p 5 4
使用此代码:
std::ofstream ch("ch_out.txt");
std::ostream_iterator< Point_2 > out( "p ", ch, "\n" );
CGAL::ch_graham_andrew( in_start, in_end, out );
问题是我没有want/can接触CGAL函数。
您必须为 std::ostream
class 重载 operator<<
,以便 "knows" 如何打印自定义 class 的实例。
根据我的理解,这是您想要完成的最简单示例:
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
class MyClass {
private:
int x_;
int y_;
public:
MyClass(int x, int y): x_(x), y_(y) {}
int x() const { return x_; }
int y() const { return y_; }
};
std::ostream& operator<<(std::ostream& os, const MyClass &c) {
os << "p " << c.x() << " " << c.y();
return os;
}
int main() {
std::vector<MyClass> myvector;
for (int i = 1; i != 10; ++i) {
myvector.push_back(MyClass(i, 2*i));
}
std::ostream_iterator<MyClass> out_it(std::cout, "\n");
std::copy(myvector.begin(), myvector.end(), out_it);
return 0;
}
我想做这样的事情:
std::ofstream ch("ch_out.txt");
std::ostream_iterator< cgal_class > out( "p ", ch, "\n" );
这可能吗?我担心,因为我的研究说不,希望它被打破了。 :)
目标是将CGAL生成的凸包点写入文件中,如下所示:
p 2 0
p 0 0
p 5 4
使用此代码:
std::ofstream ch("ch_out.txt");
std::ostream_iterator< Point_2 > out( "p ", ch, "\n" );
CGAL::ch_graham_andrew( in_start, in_end, out );
问题是我没有want/can接触CGAL函数。
您必须为 std::ostream
class 重载 operator<<
,以便 "knows" 如何打印自定义 class 的实例。
根据我的理解,这是您想要完成的最简单示例:
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
class MyClass {
private:
int x_;
int y_;
public:
MyClass(int x, int y): x_(x), y_(y) {}
int x() const { return x_; }
int y() const { return y_; }
};
std::ostream& operator<<(std::ostream& os, const MyClass &c) {
os << "p " << c.x() << " " << c.y();
return os;
}
int main() {
std::vector<MyClass> myvector;
for (int i = 1; i != 10; ++i) {
myvector.push_back(MyClass(i, 2*i));
}
std::ostream_iterator<MyClass> out_it(std::cout, "\n");
std::copy(myvector.begin(), myvector.end(), out_it);
return 0;
}