Функция работает неправильно 2018

296
23 января 2018, 12:22

Есть список и есть функция add. Добавляем элементы, а с функцией doubling удваиваем. В функции main вызываем сначала функцию add(7), а потом doubling().
На выходе почему-то получаем не 7*2, то есть 14, а почему-то получаем 7*4 т.е. 28.
Почему?
Но с add(3) doubling() все работает, т.е. получаем 6.

Код:

#include <stack>
#include <iostream>
#include <utility>
 using namespace std;
class Node
{
public:
    Node(int num) : _num(num), _next(NULL){}
    friend class List;
private:
    int _num;
    Node* _next;
};
class List
{
public:
    List() : _root(NULL){}
    void add(int rhs)
    {
        if (!_root)
        {
            _root = new Node(rhs);
        }
        else
        {
            Node* tmp = _root;
            while (tmp->_next)
            {
                tmp = tmp->_next;
            }
            tmp->_next = new Node(rhs);
        }
    }
    void print() const
    {
        Node* tmp = _root;
        while (tmp)
        {
            cout << tmp->_num << "  ";
            tmp = tmp->_next;
        }
        cout << endl;
    }
    void doubling() // udvoit kazhdoe znachenie
    {
        Node* tmp = _root;
        while (tmp)
        {
            tmp->_num *= 2;
            tmp = tmp->_next;
        }
    }
    ~List()
    {
        Node* tmp = _root;
        while (tmp)
        {
            _root = tmp->_next;
            delete tmp;
            tmp = _root;
        }
    }
private:
    Node* _root;
};
int main()
{
    List lst;
    lst.add(7);
    lst.doubling(); 
    lst.add(3);
    lst.doubling();

    lst.print();
    return 0;
}
Answer 1

Удваиваем раз:

lst.doubling(); 
lst.add(3);

Удваиваем два:

lst.doubling();

Два удвоения - это и есть учетверение, нет?

READ ALSO
массив символов С++

массив символов С++

Почему выводит весь массив символов(всю строку)? Если там будет,допустим, массив целочисельный,то выведет всего лишь адрес первого элемента

238
статическая переменная в классе

статическая переменная в классе

Для чего нам нужно еще раз объявлять статическую переменную вне класса, указывать область видимости, если я уже в классе определил ее как...

244
Как правильно записать в std::unordered_map?

Как правильно записать в std::unordered_map?

Мне нужно в мапу histogram записать значенияЯ записываю, но выдает ошибки

277
Ожидание потока и присоединение потока &lt;thread&gt;. Где параллелизм?

Ожидание потока и присоединение потока <thread>. Где параллелизм?

Добрый день! Пытаюсь вникнуть в потоки и не могу понять несколько вещей:

212