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

Конструктор присваивания или копирования - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Нужно перевести небольшую программу, написанную на C++, на С (неповторяющиеся символы в строке) http://www.cyberforum.ru/cpp-beginners/thread305326.html
Текст задачи - "Для заданной строки получить те символы, которые встречаются в ней по одному разу." Сделана на С++ (код нашел на этом форуме) #include <iostream> #include <stdio.h> #include <string.h> #include <windows.h>
C++ Нахождение наиболее теплых дней по данным за 5 лет. Нужен алгоритм, задача на Си. Заранее спасибо. Суть задачи такова: Для проведения фестиваля, с 25 июля по 8 августа были выбраны 5 следующих подряд дней,наиболее теплых, по данным за последние 5 лет. Вот, нужно составить программу для выполнения этой работы. Есть идеи? http://www.cyberforum.ru/cpp-beginners/thread305320.html
C++ Добавить по К элементов в начало и в конец одномерного динамического массива
Добавить по К элементов в начало и в конец динамического одномерного массива, заполнить его случайными числами и вывести на экран
Работа с временем C++
Здравствуйте! Помогите пожалуйста с идеями. Надо написать программку которая будет напоминать о ранее записанных действиях. Как я планировал, интерфейс - это будет табличка с колонками. 1. Дата 2. Исполнитель 3. Описание запланированного. Думаю все это записывать в файл и соответственно из файла выводить в консольное окно. Но как реализовать само напоминание используя SYSTEMTIME (...
C++ не происходит сортировка http://www.cyberforum.ru/cpp-beginners/thread305308.html
Добрый день.Вот программный код,программа запускается,но не работает сортировка. Подскажите ошибку пожалуйста. #include <vcl.h> #pragma argsused #include <iostream.h> #include <conio.h> void buble (char* a, int n) // функция пузырька { int i,j,t; // объявление переменных for (i = 0; i <= n-1; i++)
C++ Многоразрядное число в динамическом двунаправленном списке Задача такова: Нужно написать функцию (на с) которая бы находила разность двух чисел(не отрицательных), которые хранятся в динамическом двунаправленном списке. Уже не первый день ломаю голову, но ничего не получается. Help please! подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.05.2011, 16:06     Конструктор присваивания или копирования
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
struct stack_card
{
    stack_card():obj(0), ptr(0)
    {
    }
    int obj;
    stack_card* ptr;
};
 
stack(const stack& other)
{
     for(stack_card* temp = other.data; temp; temp = temp->ptr)
        push(temp->obj);
}
 
void swap(stack& other)
{
    std::swap(data, other.data);
}
 
stack& operator =(const stack& other)
{
    stack tmp(other);
    swap(tmp);
    return *this;
}
Добавлено через 40 минут
Констр копии неверный. Протупил.

Добавлено через 1 час 18 минут
Так будет верно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    stack(const stack& other):data(0)
    {
        stack temp;
        for(Node* tmp = other.data; tmp; tmp = tmp->next)
        {
            temp.push(tmp->elem);
        }
        while(!temp.empty())
        {
            push(temp.top());
            temp.pop();
        }
    }
Добавлено через 15 минут
Держи. Может пригодится. ConstIterator пока времени нет добить)

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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#include <iostream>
#include <algorithm>
#include <iterator>
 
struct forward_iterator_tag
{
};
 
template<class T>
class stack
{
    struct Node
    {
        Node(T el = T()):elem(el), next(0)
        {
        }
        T elem;
        Node* next;
    };
    class Iterator;
public:
    typedef T value_type;
    typedef size_t size_type;
    typedef Iterator iterator;
 
    stack():data(0), sz(0)
    {
    }
    ~stack()
    {
        while(data)
        {
            pop();
        }
    }
    stack(const stack& other):sz(0), data(0)
    {
        stack temp;
        for(Node* tmp = other.data; tmp; tmp = tmp->next)
        {
            temp.push(tmp->elem);
        }
        while(!temp.empty())
        {
            push(temp.top());
            temp.pop();
        }
    }
    stack& operator =(const stack& other)
    {
        stack tmp(other);
        swap(tmp);
        return *this;
    }
    void push(T el)
    {
        Node* tmp = new Node(el);
        tmp->next = data;
        data = tmp;
        ++sz;
    }
    void pop()
    {
        Node* tmp = data;
        data = data->next;
        --sz;
        delete tmp;
    }
    bool empty() const {return sz == 0;}
    size_t size() const {return sz;}
    T& top() {return data->elem;}
    const T& top() const {return data->elem;}
    iterator begin() {return iterator(data);}
    iterator end() {return iterator(0);}
private:
    void swap(stack& other)
    {
        std::swap(data, other.data);
        std::swap(sz, other.sz);
    }
    Node* data;
    size_t sz;
 
    class Iterator
    {
    public:
        typedef forward_iterator_tag iterator_category;
        typedef ptrdiff_t difference_type;
        typedef T value_type;
        typedef T& reference;
        typedef T* pointer;
 
        Iterator(Node* curr):
            current(curr)
        {
        }
        Iterator& operator ++()
        {
           current = current->next;
           return *this;
        }
        Iterator& operator ++(int)
        {
            Iterator temp(current);
            ++(*this);
            return temp;
        }
        T& operator *() {return current->elem;}
        T* operator ->() {return &current->elem;}
        bool operator !=(const Iterator & other)
        {
            return current != other.current;
        }
        bool operator ==(const Iterator& other)
        {
            return (!(other != *this));
        }
    private:
        Node* current;
    };
    class Const_Iterator;
};
 
template<class T>
std::ostream& operator <<(std::ostream& os, stack<T> stck)
{
    for(typename stack<T>::iterator iter = stck.begin(); iter != stck.end(); ++iter)
    {
        os << *iter << std::endl;
    }
    return os;
}
 
int main()
{
    stack<int> stck;
    stck.push(5);
    stck.push(4);
    stck.push(10);
    stck.push(1);
    stck.push(3);
    std::copy(stck.begin(), stck.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
    stack<int> stck2;
    stck2.push(15);
    stck2 = stck;
    std::copy(stck.begin(), stck.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
    std::copy(stck2.begin(), stck2.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
}
 
Текущее время: 12:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru