【发布时间】:2016-09-07 06:41:08
【问题描述】:
我有一个类似树的数据结构定义为:
template<typename T>
struct node {
T val;
node<T>* parent;
unique_ptr<node<T>> next_sibling;
unique_ptr<node<T>> first_child;
};
template<typename T>
struct tree {
...
private:
unique_ptr<node<T> _head;
};
我还为树类定义了几个迭代器(preorder、inorder...)。
在给定的树上使用std::transform 可以:
tree<int> t;
...
std::transform(t.begin(), t.end(), t.begin(), [](){});
但是我知道想要拥有类似于 back_inserter 的东西来构建具有相同层次结构的新树:
tree<int> t_n;
std::transform(t.begin(), t.end(), my_inserter(t_n));
如何做到这一点?
【问题讨论】:
-
但它并不是真正的常规
back_inserter,因为它不是线性结构——树有分支。我认为std::transform很难做到这一点。 -
我知道
back_inserter是线性的——这正是我正在努力解决的问题:)。 -
那么为什么你觉得你必须使用
std::transform?
标签: c++ c++11 stl iterator c++14