Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить сумму ряда https://www.cyberforum.ru/ cpp-beginners/ thread2497255.html
Помогите решить. Не могу понять прогрессию.
Вычислить сумму отрицательных элементов массива C++
В одномерном массиве, состоящем из N вещественных чисел вычислить: • Сумму отрицательных элементов. • Произведение элементов, находящихся между min и max элементами. • Произведение элементов...
C++ Как найти "\n" в строке Здравствуйте, 1)Подскажите пожалуйста, вот у меня есть string в нем текст с разделителем: string hw = "hello\nworld"; Мне соответсвенно нужно разделить два текста разделенные \n, а, для... https://www.cyberforum.ru/ cpp-beginners/ thread2497242.html C++ Нарушение прав доступа при чтении по адресу 0xFFFFFFEA https://www.cyberforum.ru/ cpp-beginners/ thread2497207.html
Доброго времени суток! Возникла проблема с динамической памятю, может кто подсказать где примерно я облажался? int n;//Количество элементов массива void print(int* arr); int control(); void...
C++ Циклы: получить заданную последовательность
Дано натуральное число n. Получить последовательность a1, a2, ... an, которая происходит с помощью: a0=1; {a}_{k} = {ka}_{k-1} + 1/k (k = 1, 2,...)
C++ Циклы: вычислить x * y, используя только операцию сложения https://www.cyberforum.ru/ cpp-beginners/ thread2497199.html
Дано натуральные числа x,y. Вычислить x * y, используя только операцию сложения. Решить двумя способами.
C++ Осуществить все операции над элементами множеств Создайте программу, в которой пользователь вводит элементы двух множеств в соответствии с одним из вариантов заданий. Программа позволит осуществить все операции над элементами множеств: пересечение,... https://www.cyberforum.ru/ cpp-beginners/ thread2497196.html C++ Слово const
Подскажите пожалуйста в этих двух строках кода слово const имеет различие? Почему в одном случае стоит в начале, а в другом к конце? Я так понимаю в первом случае это константная функция, а во...
C++ Найти ошибку в коде. Представление числа в памяти компьютера Нужно вывести представление числа в памяти компьютера. Как исправить ошибку в коде (смотрите на скрины)? #include <iostream> #include <math.h> #include <vector> #include <algorithm> using... https://www.cyberforum.ru/ cpp-beginners/ thread2497168.html C++ Регулярное выражение regex TCHAR *s = (TCHAR*)"mov eax,dword"; regex r("mov eax,dword{4,}]"); if (regex_match(s, r)) { MessageBox(NULL, "True", NULL, MB_OK); } https://www.cyberforum.ru/ cpp-beginners/ thread2497150.html
C++ Вывести на экран элементы, для кот. зарплата меньше чем значение Х
Дан класс Рабочий с приватными (private) полями: Имя, дата, дата приема на работу, должность, зарплата и публичные поля: конструктор без параметров, конструктор с параметрами, деструктор и...
C++ Функция определяющая високосность года Описать функцию IsLeapYear(Y) логического типа, которая возвращает True, если год Y (целое положительное число) является високосным, и False в противном случае. Вывести значение функции IsLeapYear... https://www.cyberforum.ru/ cpp-beginners/ thread2497132.html
0 / 0 / 0
Регистрация: 03.11.2018
Сообщений: 18
0

Как убить 100 зайцев 1 выстрелом? - C++ - Ответ 13810561

06.09.2019, 14:02. Показов 630. Ответов 3
Метки (Все метки)

Дана задача: написать деревья и куууучу функций к ним. Но они все однотипные. Data хранит данные в вершине(число) Вывести data*2, вывести data+7, вывести data, если четное и т.д. Решил написать метод в классе, который просто будет принимать лямбда функцию и тогда не нужно будет писать все это) но тут ошибка
error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall Tree::doForEach<class <lambda_caeb593af6657ee54755ff20215f99b2> >(class <lambda_caeb593af6657ee54755ff20215f99b2>)" (??$doForEach@V<lambda_caeb593af6657ee54755ff20215f99b2>@@@T ree@@QAEXV<lambda_caeb593af6657ee54755ff20215f99b2>@@@Z) в функции _main
1>SIAOD-2kurs.exe : fatal error LNK1120: неразрешенных внешних элементов: 1

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
main.cpp
 
#include "Tree.h"
 
int main()
{
    std::vector <uint64_t> inputData;
    inputData.reserve(6);
    //for (size_t i = 0; i < 5; ++i){
        inputData.push_back(2);
        inputData.push_back(1);
        inputData.push_back(3);
        inputData.push_back(5);
        inputData.push_back(4);
        inputData.push_back(6);
    //}
    std::cout << std::endl;
    Tree myTree(&inputData);
    myTree.print();
    myTree.getSize();
    std::cout << myTree.getChecksum();
 
    myTree.doForEach([](auto i) {
        cout << i << std::endl;
    });
}

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
Tree.h
 
#pragma once
#include <inttypes.h>
#include <iostream>
#include <vector>
#include <algorithm>
 
typedef struct vertex
{
    uint64_t Data;
    vertex* Left = nullptr;
    vertex* Right = nullptr;
}Vertex;
 
 
class Tree
{
private:
    std::vector<uint64_t>* inputVector = nullptr;
    Vertex*  _Root = nullptr;
    double   _Sum = 0.0;
    uint64_t _Size = NAN;
 
    void     __print(Vertex* vertex); 
    void     __addNode(uint64_t inputData, Vertex*& vertex);
    uint64_t __getSize(Vertex* Vertex);
    uint64_t __getAverageHeight(Vertex* Vertex, size_t length);
    uint64_t __getChecksum(Vertex* vertex);
 
    template <typename LYAMBDA>
    void __doForEach(Vertex*, LYAMBDA f);
 
public:
    Tree(std::vector <uint64_t>*);
 
    void     addNode(uint64_t);
    uint8_t  getHeight(Vertex*);
    void     getSize();
    double   getAverageHeight();
    uint64_t     getChecksum();
    void     print();
 
    template <typename LYAMBDA>
    void doForEach(LYAMBDA f);
 
    //void printTree(Vertex*);
};
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
117
118
119
120
121
122
123
124
125
126
127
Tree.cpp
 
#include "Tree.h"
 
Tree::Tree(std::vector <uint64_t>* inputArr)
{
    inputVector = inputArr;
    for (std::vector<uint64_t>::iterator it = inputVector->begin(); it != inputVector->end(); it++){
        __addNode(*it, _Root);
    }
}
 
void Tree::__addNode(uint64_t inputData, Vertex*& vertex)
{
    if (vertex == nullptr)
    {
        vertex = new Vertex;
        vertex->Data = inputData;
        vertex->Left = vertex->Right = nullptr;
    }
    if (inputData < vertex->Data) {
        if (vertex->Left != nullptr)
            __addNode(inputData, vertex->Left);
        else {
            vertex->Left = new Vertex;
            vertex->Left->Left = vertex->Left->Right = nullptr;
            vertex->Left->Data = inputData;
        }
    }
    if (inputData > vertex->Data) {
        if (vertex->Right != nullptr)
            __addNode(inputData, vertex->Right);
        else {
            vertex->Right = new Vertex;
            vertex->Right->Left = vertex->Right->Right = nullptr;
            vertex->Right->Data = inputData;
        }
    }
}
 
void Tree::addNode(uint64_t inputData){
    __addNode(inputData, _Root);
}
 
uint8_t Tree::getHeight(Vertex* vertex)
{
    if (vertex == nullptr)
        return 0;
    else 
        return uint8_t((1 + std::max(getHeight(vertex->Left), getHeight(vertex->Right))));
}
 
uint64_t Tree::__getSize(Vertex* Vertex)//TODO
{
    if (Vertex == nullptr)
        return 0;
    else
          return uint64_t((1 + __getSize(Vertex->Left) + 
                    __getSize(Vertex->Right)));
}
 
void Tree::getSize(){
    _Size = __getSize(_Root); 
}
 
 
 
double Tree::getAverageHeight()
{
    _Sum = __getAverageHeight(_Root, 1);
 
    if (_Size != _Size)
        _Size = __getSize(_Root);
 
    return _Sum / _Size;    
}
 
uint64_t Tree::__getAverageHeight(Vertex* Vertex, size_t length) {
    if (Vertex == nullptr)
        return 0;
    else {
        return uint64_t(length + __getAverageHeight(Vertex->Left, length + 1)
            + __getAverageHeight(Vertex->Right, length + 1));
    }
}
 
uint64_t Tree::getChecksum()
{
    return uint64_t(__getChecksum(_Root));
}
 
uint64_t Tree::__getChecksum(Vertex* vertex) {
  if (vertex == nullptr) 
      return 0;
 
  return vertex->Data + __getChecksum(vertex->Left) +
         __getChecksum(vertex->Right);
}
 
void Tree::__print(Vertex* vertex) 
{
    if (vertex == nullptr)
        return;
 
    __print(vertex->Left);
    std::cout << vertex->Data;
    __print(vertex->Right);
}
 
void Tree::print() {
    __print(_Root);
}
 
template <typename LYAMBDA>
void Tree::doForEach(LYAMBDA f) {
    __doForEach(_Root, f);
}
 
template <typename LYAMBDA>
void Tree::__doForEach(Vertex* vertex, LYAMBDA f) {
  if (vertex == nullptr) 
      return;
 
  __doForEach(vertex->Left, f);
  f(vertex->Data);
  __doForEach(vertex->Right, f);
}
Что не так?

Вернуться к обсуждению:
Как убить 100 зайцев 1 выстрелом? C++
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2019, 14:02
Готовые ответы и решения:

Убить двух зайцев
У кого-нибудь есть предложения, как совместить процесс изучения программирования и физики?

Сессию нужно убить memberid нужно принудительно убить и страницы... как ?
&lt;SCRIPT LANGUAGE=VBScript RUNAT=Server&gt; SUB Session_OnStart Session.Timeout = 3 ...

Как найти нужное значение из формулы: 8.39=100/2.6+100/X-100
Здравствуйте люди. Помогите, если можете найти число &quot;х&quot; из формулы: 8.39=100/2.6+100/X-100 ...

Найти общую величину урона, нанесённого Годзилле выстрелом
Арнольд Шварценеггер стреляет в ужасного монстра Годзиллу из дробовика. Нужно найти общую величину...

3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2019, 14:02

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Программа подсчета зайцев
Пример программы со стр. 57 Самоучителя на тему &quot;Метка&quot;.. В чём смысл этой программы. После...

Какова вероятность поразить цель с произвольной дистанции одним выстрелом.
Стрельба по мишени может вестись с каждой из дистанций 600, 500 и 300м. Вероятности поражения цели...

Какова вероятность того, что мишень будет поражена хотя бы одним выстрелом?
Здравствуйте. Решаю такую задачу: Команда состоит из двух стрелков. Вероятность попадания в мишень...

Объяснить задачу про охотника и зайцев
Вот условие задачи: Хороший охотник, ная расположение (координаты х и у) n зайцев может выстрелить...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.