Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 11.10.2017
Сообщений: 34

Вектор указателей не сруктуры

27.04.2019, 21:11. Показов 2758. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, пишу код и возникла проблема. Данный кусок когда считывает данные из файла и преобразует в вектор указателей на стуктуру узла дерева. Возникают какие-то ошибки с памятью, прошу совета

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
struct Node1 {
 
    int value, left, right;
 
};
 
class BinaryTree {
 
public:
 
    vector<Node1 *> listOfSons;
 
    BinaryTree() {
 
        const int N = 1000;
        listOfSons.reserve(N);
 
        for (int i = 0; i < N; i++) {
 
            Node1 *tmpNode = new Node1;
            listOfSons.emplace_back(tmpNode);//заполняю пустыми структурами
 
            delete tmpNode;
 
        }
 
    }
 
    void parserBinaryTree(string path) {
 
        ifstream f(path);
 
        if (!f) {
 
            cin.get();
 
        }
 
        string line;
        vector<string> l;
        vector<int> num;
 
        l.reserve(100);
        num.reserve(100);
 
        while (!f.eof()) {
 
            getline(f, line);
 
            boost::split(l, line, boost::is_any_of(" "));//*разбиваю считанную строку в вектор строк
 
            for (auto ls:l) {
 
                num.emplace_back(boost::lexical_cast<int>(ls));// тот же вектор строк превращаю в вектор целочисленных
 
            }
//обработка полученных значений(максимум чисел в строке файла = 3)
 
            Node1 *tmpNode = new Node1;
 
            switch (l.size()) {
                case 3: {
 
                    tmpNode->value = num[0];
 
                    if (num[1] > num[2]) {
 
                        tmpNode->left = num[2];
                        tmpNode->right = num[1];
 
                    } else {
 
                        tmpNode->left = num[1];
                        tmpNode->right = num[2];
 
                    }
 
                }
                case 2: {
 
                    tmpNode->value = num[0];
 
                    if (num[0] > num[1]) {
 
                        tmpNode->left = num[1];
                        tmpNode->right = -1;
 
                    }
                    if (num[0] < num[1]) {
 
                        tmpNode->right = num[1];
                        tmpNode->left = -1;
 
                    }
 
                }
                case 1: {
 
                    tmpNode->value = num[0];
                    tmpNode->right = -1;
                    tmpNode->left = -1;
 
                }
 
            }
 
            listOfSons[num[0]] = tmpNode;
 
            num.clear();
            l.clear();
 
        }
 
        f.close();
 
    }
на выходе имею такие неправильные адреса( должно по идее получиться некоторые заполненные структуры, а все остальные пустые



входные данные
100 70 150
70 50 90
50 10 55
55 60
60 65 58
150 200
200 210 170
10
58
65
90
170
210 240
240
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.04.2019, 21:11
Ответы с готовыми решениями:

Вектор ссылок и вектор указателей
есть 2 задачи 1-создать вектор ссылок на Employee для хранения различных объектов произвольных классов 2-создать вектор указателей...

Вектор указателей
Добрый день) Припустим что у нас есть вектор указателей на что... то, какой размер он будет занимать?) #include &lt;iostream&gt; ...

Вектор константных указателей
Как мне создать вектор константных указателей? Не вектор указателей на константы, и не константный вектор указателей, а именно вектор...

33
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
29.04.2019, 00:21
Студворк — интернет-сервис помощи студентам
IGPIGP, мне возразите, хоть кто-нибудь, хоть автор, хоть кто...
я же офигенный алгоритм по переводу перечня узлов в дерево забацал!
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.04.2019, 00:48
Цитата Сообщение от Zireae1 Посмотреть сообщение
Данный кусок когда считывает данные из файла и преобразует в вектор указателей на стуктуру узла дерева. Возникают какие-то ошибки с памятью
Kuzia domovenok, у меня как раз были какие-то соображения об ошибках. Я бы их с радостью продемонстрировал, но не уверн, что это нужно.
Хороший вопрос - путь к решению. Остальные - риторика.

Добавлено через 16 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
IGPIGP, мне возразите, хоть кто-нибудь, хоть автор, хоть кто...
я же офигенный алгоритм по переводу перечня узлов в дерево забацал!
Kuzia domovenok, я не сомневаюсь ни секунды. Вопрос темы для меня не в этом.
Kuzia domovenok, когда человек поймёт разницу между цепочкой байт и объектом данных, это и будет порыв в его сознании. Остальное - вопрос ТС, - поймёт или продолжит поиск.
1
 Аватар для vlisp
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,450
29.04.2019, 17:13
Цитата Сообщение от IGPIGP Посмотреть сообщение
Поясните, будьте любезны.
все просто. в корне бинарного дерева всегда один элемент. на первом уровне 2, на втором 4, на третьем 8 и т.д. в индийской легенде падишаха развели на 2^64 зерна. Это самый худший случай. Уравновешенные бинарные деревья как раз к нему и стремятся. Следовательно текстовый формат сразу отпадает из-за огромной величины строки для нижних уровней. а не текстовый не имеет смысла по определению
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.04.2019, 18:21
vlisp, я не понял о чём вы хотите сказать. О экспоненциальном росте уровней? И что?
А вот это каламбур:
Цитата Сообщение от vlisp Посмотреть сообщение
Следовательно текстовый формат сразу отпадает из-за огромной величины строки для нижних уровней. а не текстовый не имеет смысла по определению
Что-то у вас всё отпадает или не имеет смысла. И да, я нигде не говорил о текстовом формате. Скажите проще. Что вам, показалось настолько диким, что вы охарактеризовали это как глупость без какого-либо желания на извинения?
Это вас характеризует как умного человека?
Что по вашему имеет смысл не отпасть?
2
 Аватар для vlisp
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,450
29.04.2019, 20:17
Цитата Сообщение от IGPIGP Посмотреть сообщение
И что?
а то, что на нижнем уровне вас ждет строка с недопустимым количество символов. Попробуйте записать в текстовый файл в виде бинарного дерева последовательность натуральных чисел от 1 до 10^9. 10^9 - наиболее употребляемое олимпиадное число.
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
29.04.2019, 20:24
vlisp, какая вообще разница 109^9 символов в ширину или в столбик?
2
 Аватар для vlisp
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,450
29.04.2019, 20:34
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
какая вообще разница 109^9 символов в ширину или в столбик?
большая, в столбик все прекрасно понятно, в строку... откройте любой экзешник и посмотрите насколько все удобно.

Слушайте, ну, если у нас есть просто файл с числами разделенными любым разделителем, разве нельзя создать бинарное дерево? можно и причем однозначно. так зачем эти сыновья (ох уж этот бытовой русизм) в файле???
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.04.2019, 20:37
Цитата Сообщение от vlisp Посмотреть сообщение
а то, что на нижнем уровне вас ждет строка с недопустимым количество символов. Попробуйте записать в текстовый файл в виде бинарного дерева последовательность натуральных чисел от 1 до 10^9. 10^9 - наиболее употребляемое олимпиадное число.
Не понимаю. vlisp, вы проявили некоторую агрессию оценив попытку упрощённой сериализации дерева, как глупость. Но ведь голова должна владеть знаниями. А если знания владеют головой, то это как раз и становится причиной агрессивного поведения. Добытые дорогой ценой знания нуждаются в защите. Фараон и старец из легенды о шахматах, не должны владеть воображением.
Если данные читаются и передаются в структуры, то размер структур не зависит от их устройства. Вектор с данными размеров в 100500 элементов, не больше дерева в котором столько же элементов. Вопрос лишь в том, нужно ли это. Вопрос задан, значит ТС это нужно. При чём тут неумные оценки чужого интеллекта?
vlisp, ведь не нужно же обладать широким и острым умом, чтобы представить задачку в которой самопостроение из потока не работает. Вот пример:
Кто-то решил написать сайт с демонстрацией работы дерева. Он интерактивен. Описание в помощи содержит рисунок, перечень нумерованных узлов и т.п. Теперь нужен переносимый способ построение одного и того же дерева.
Что касается формата, то в данной теме это и вовсе не нужно. Но советую подумать о том, что занимает больше размер в памяти:
структура содержащая массив double размером 1024
метаописание структуры в строке "struct{array[1024]}"
1
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
29.04.2019, 21:14
vlisp, короче, я так понимаю, всех смутил сам факт того, что сортировочное дерево зачем-то сохраняют в формате "список узлов со списком потомков", когда дерево проще строить с нуля из чистого списка.
Но Относитесь к этой задаче проще! Что если задать её не как задачу про поиск, а как просто задачу про сохранение произвольного древовидного графа в файле? Тут и список потомков будет актуален для сохранения.
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.04.2019, 21:29
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
! Что если задать её не как задачу про поиск, а как просто задачу про сохранение произвольного древовидного графа в файле?
Kuzia domovenok, вот темка
Реализация дерева поиска список сыновей
в ней есть ссылки и оказывается, это задача хоть и не древнее шахмат, но имеет свою историю.

Добавлено через 3 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
сортировочное дерево
даже я так не умею
1
 Аватар для vlisp
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,450
29.04.2019, 21:42
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Относитесь к этой задаче проще!
куда уж проще, нельзя создать одинаковые б/д, если перемещать данные, например 1 5 2 и 2 1 5 дадут разные деревья. но можно использовать вектор для загрузки в него данных и сортировки. тогда получится сбалансированное б/д при любом расположении данных. а вот так как тут... это извращение
0
0 / 0 / 0
Регистрация: 11.10.2017
Сообщений: 34
30.04.2019, 23:19  [ТС]
Цитата Сообщение от vlisp Посмотреть сообщение
тогда получится сбалансированное б/д при любом расположении данных. а вот так как тут... это извращение
Как мне сказали реализовывать задачу так я с ней и справляюсь, вопрос был о проблеме с памятью, я эти знания получил и спасибо всем кто отвечал. А что извращение или нет и как лучше делать дерево и из какого файла считывать это вопросы для реальных задач в реальном мире. Никак не для университетской задачки.
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
30.04.2019, 23:52
Zireae1, ты видел мой код?
Вектор указателей не сруктуры
0
 Аватар для vlisp
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,450
01.05.2019, 17:38
Цитата Сообщение от Zireae1 Посмотреть сообщение
Как мне сказали реализовывать задачу так я с ней и справляюсь, вопрос был о проблеме с памятью, я эти знания получил и спасибо всем кто отвечал. А что извращение или нет и как лучше делать дерево и из какого файла считывать это вопросы для реальных задач в реальном мире. Никак не для университетской задачки.
наконец дочитал первое сообщение. специально скопировал и перенес в блокнот "содержимое файла", потом отредактировал и получил "файл" объемом в 2 раз меньше символов из которого получится такое же дерево.
вот самая простая, "академическая" реализация дерева, без собственно реализации (их в инетиках мульон)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
using namespace std;
 
class BT {
public:
    BT(){cout << "Creating tree" << endl;};
    ~BT(){cout << "Deleting tree" << endl;};
    
    int Add(int num){cout << "Adding number " << num << " to tree" << endl;};
        // здесь мог быть стек
        // читаем из файла с содержимым типа: 100 70 150 50 90 10 55 60 65 58 200 210 170 90 240
    int LoadFromFile(string fn){cout << "Loading tree from file" << endl;};
    int Print(){ cout << "Printing tree" << endl;};
    
private:
    struct Node {
        int value;
        Node* left ;
        Node* right;
    }* root;
};
 
 
int main()
{
    BT* t = new BT();
    t->LoadFromFile("");
    t->Print();
    t->Add(4);
    t->Print();
    delete t;
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.05.2019, 17:38

Вектор указателей на класс
Создал класс: class Facility; #ifndef PROCESS_H_ #define PROCESS_H_ class Process { private:

вектор указателей абстрактного класса
Добрый вечер, задача состоит в следующем: найти наибольшую площадь фигуры, посредством использования полиморфизма (родительский абстрактный...

Вектор указателей на абстрактный класс?
Решаю задачу из книги, там сказано так: &quot;Напишите main(), где создавался бы массив указателей на класс publication. Это очень похоже...

Вектор указателей на объекты класса
Добрый вечер! Есть базовый класс Place от него наследуется класс City. Мне нужно реализовать функцию добавления объекта в вектор и...

Вектор из указателей абстракттного класса
Критически прошу помощи ! Есть абстрактный класс и два его дочерних. В дочерних переопределена чисто виртуальная функция вычисления...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru