Форум программистов, компьютерный форум CyberForum.ru

Умные указатели - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определите по данным, сколько банок не прострелил Гарри и сколько банок не прострелил Ларри. http://www.cyberforum.ru/cpp-beginners/thread1090285.html
Бандиты Гарри и Ларри отдыхали на природе. Решив пострелять, они выставили на бревно несколько банок из-под кока-колы (не больше 10). Гарри начал простреливать банки по порядку, начиная с самой левой, Ларри — с самой правой. В какой-то момент получилось так, что они одновременно прострелили одну и ту же последнюю банку. Гарри возмутился и сказал, что Ларри должен ему кучу денег за то, что тот...
C++ Перевести код из языка Pascal в C++ Помогите пожалуйста перевести код программы из языка Pascal в C++. А то у меня не совсем нормально получается. program pas; const N = 10; var i, t, k, G: integer; http://www.cyberforum.ru/cpp-beginners/thread1090276.html
C++ Написать функцию вычисления знака числа
Здравствуйте! Прошу прощения за глупый вопрос, мог бы спросить и у препода, но ждать долго, а сдать хочу досрочно) Задание прикрепил ниже. Насколько я понял, речь идет о первом знаке после запятой. Но что это за условие под фигурной скобкой?
C++ Изменить программу таким образом, чтобы ввод исходных данных осуществлялся из файла
Изменить программу,я её закинул архивом , таким образом чтобы ввод исходных данных осуществлялся из файла, результат также должен выводиться в файл. #include <stdio.h> #include <conio.h> #include <stdio.h> #include <conio.h> #include <vcl.h> #include <iostream.h> #pragma hdrstop //---------------------------------------------------------------------------
C++ Найти и вывести все числа из интервала (доделать) http://www.cyberforum.ru/cpp-beginners/thread1090242.html
Привет помогите пожалуйста доделать задачу она работает только не до конца правильно: 5. Дано натуральное двухзначное число N. Найти и вывести все числа из интервала от 1 до N-1, для которых произведение всех цифр совпадает с суммой цифр этого числа. Если таких чисел нет, то вывести соответствующее сообщение. например, N = 44. Числа: 18,24. #include <iostream> using namespace std; int...
C++ Вычислить Y при определенном значении X Помогите решить в имберкадеро С++ , Дано действительное число X вычислить Y если 0 при Х < или = 0 Х при 0< X < или = 1 Х в 4 степени в остальных случаях И если не трудно распишите каждую строчку что вы сделали, заранее спасибо! подробнее

Показать сообщение отдельно
R_e_n
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 35

Умные указатели - C++

05.02.2014, 22:34. Просмотров 537. Ответов 2
Метки (Все метки)

Пишу класс дерево поиска:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<typename T, typename Compare>
class AvlTree {
    private:
        struct Node {
            T key;
            size_t height;
            std::unique_ptr<Node> leftChild;
            std::unique_ptr<Node> rightChild;
 
            explicit Node(const T &key) : key(key), height(1), leftChild(nullptr), 
                rightChild(nullptr) {
            }
        };
}
По образцу http://habrahabr.ru/post/150732/.
Как переписать функцию правого поворота? А конкретнее, какой тип переменных использовать при передаче?
Оригинал:
C++
1
2
3
4
5
6
7
8
9
node* rotateright(node* p) // правый поворот вокруг p
{
    node* q = p->left;
    p->left = q->right;
    q->right = p;
    fixheight(p);
    fixheight(q);
    return q;
}
Я написал вот так:
C++
1
2
3
4
5
6
7
8
9
10
std::unique_ptr<Node> RotateRight(std::unique_ptr<Node> &node);
{
        std::unique_ptr<Node> leftChild = std::move(node->leftChild);
        node->leftChild = std::move(leftChild->rightChild);
        leftChild->rightChild = std::move(node);
        FixHeight(leftChild->rightChild.get());
        FixHeight(leftChild.get());
 
        return std::move(leftChild);
}
И еще функцию поиска узла с минимальным ключом.
Оригинал:
C++
1
2
3
4
node* findmin(node* p) // поиск узла с минимальным ключом в дереве p 
{
    return p->left?findmin(p->left):p;
}
Я написал вот так:
C++
1
2
3
std::unique_ptr<Node> FindNodeWithMinKey(std::unique_ptr<Node> &node) const {
 return node->leftChild ? FindNodeWithMinKey(node->leftChild) : std::move(node);
}
Проблема в том, что я запутался, когда я должен передавать в методы std::unique_ptr<Node> &node а когда обычные указатели Node *. Операция std::move(node); портит дерево. Я же не могу обходить дерево вот таким способом node = std::move(node->leftChild)?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru