Предотвращение копирования структур - с помощью рекурсивных функций - PullRequest
0 голосов
/ 21 октября 2011

очень упрощенная (и глупая) абстракция того, что я делаю, описана ниже:

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 - это функция, которая должна быть истинной, чтобы ветвь была «добавлена» в новое дерево.

Мне интересно то, сколько копий «создано», если, скажем, глубина (разница междуначальное начало, конец) это "Х".- Боюсь, что для каждой глубины создается новая копия «а».Это то, что я хочу предотвратить.Так я должен вернуться по ссылке?- или по указателю?

1 Ответ

0 голосов
/ 24 октября 2011

UncleBens действительно дал правильный вопрос, который мне нужен, чтобы найти «решение».
Я полностью «забыл», что вы можете явно использовать аргументы по ссылке в качестве вывода. Мне не нужно ничего возвращать, так как я редактирую оригинал «а», а не копию.

...