我有一个看起来像这样的复杂对象:
struct A
{
int a;
}
struct B
{
int b;
vector<A> vecA;
}
我目前按以下方式打印B的矢量:
struct PrintStruct
{
ostream &ostream_;
PrintStruct(ostream &stream) : ostream_(stream) {}
void operator()(const A& elementA)
{
ostream_ << elementA.a;
}
void operator()(const B& elementB)
{
ostream_ << elementB.b;
for_each(elementB.vecA.begin(), elementB.vecA.end(), (*this));
}
}
void print()
{
vector<B> vecB;
for_each(vecB.begin(), vecB.end(), PrintStruct(cout));
}
这一定是最好的方法吗?我的主要关注点是在函子本身内调用(*this)
中的for_each
。这样做安全吗?我认为应该如此,但我不确定是否会产生任何意想不到的后果?
答案 0 :(得分:0)
我的主要关注点是在函子本身内调用
(*this)
中的for_each
。这样做安全吗?
一般无法回答,但在您的情况下,这是安全的。
对for_each
的调用会复制PrintStruct
对象并使用它。副本的ostream_
成员将引用与原始ostream_
的{{1}}成员相同的对象。应该没有问题。
答案 1 :(得分:-1)
我坚信for_each
大部分已经过时了。与范围循环相比,我认为它没有任何好处。代码实际上看起来更干净,更直接,在使用时不需要特殊的classess或lambdas:
void print()
{
vector<B> vecB;
for(const auto& elem : vecB) {
std::cout << elem;
}
}