очень упрощенная (и глупая) абстракция того, что я делаю, описана ниже:
class A{
private:
template <typename InIt>
A foo(InIt begin, InIt end, A& a) {
// {begin, ind} is a datastructure containing all "terms" to search for.
auto iter(sub.begin());
auto e(sub.end());
// search trough all elements in original structure.
do
if (FUNC) {
if (++begin != end) {
return iter->foo(begin, end, a.append_values(iter));
//append_values appends a copy of the element's values at iter
//does not copy the sub "trees" of the element at "iter"
//it returns a reference to the appended sub "tree"
} else {
return a;
}
}
} while (++iter != e);
return a;
}
};
Sub - это вектор, содержащий объекты класса "A" - так эффективно создавая структуру дерева данных.FUNC - это функция, которая должна быть истинной, чтобы ветвь была «добавлена» в новое дерево.
Мне интересно то, сколько копий «создано», если, скажем, глубина (разница междуначальное начало, конец) это "Х".- Боюсь, что для каждой глубины создается новая копия «а».Это то, что я хочу предотвратить.Так я должен вернуться по ссылке?- или по указателю?