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

Оператор копирования для объектов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ C++ исправить ошибки http://www.cyberforum.ru/cpp-beginners/thread1150005.html
Помогите исправит ошибки=) #include <iostream> #include <stdio.h> #include <math.h> #include <conio.h> #include <time.h> using namespace std; int mas; int i,j,m,n,s,l,d;
C++ На входе строка любой длины, на выходе получить строку в обратном порядке дело было на собеседовании : задали такую задачу. На входе строка любой длины , на выходе получить строку в обратном порядке (ABC... ->...CBA ) я переволновался и написал такой код) и объяснить нечего не смог ((( как вы думаете это правильное решение? #include "stdafx.h" #include "iostream" #include "string.h" using namespace std; int _tmain(int argc, _TCHAR* argv) { http://www.cyberforum.ru/cpp-beginners/thread1150000.html
Задача коммивояжера - выход за пределы массива C++
Бьет ошибку! Я так понимаю где-то выход за пределы массива! Народ гляньте кто, а то я уже ничего не вижу! Может свежий взгляд увидит как исправить #include <vcl.h> #include <tchar.h> #include <stdio.h> #include <conio.h> //
C++ Найти два последовательных члена последовательности, среднее арифметическое которых ближе всего к определенному числу
Здравствуйте, помогите сделать задание, ни как не могу в него вникнуть: Компоненты файла f – целые (отличные от нуля) числа: х, y1, ... yn. Вывести на экран два последовательных члена этой последовательности, среднее арифметическое которых ближе всего к х. Выполнить задания для текстового и бинарного файлов.
C++ Заполнить двумерный массив 7x7 http://www.cyberforum.ru/cpp-beginners/thread1149931.html
Заполнить двумерный массив 7x7 следующим видом: Добавлено через 15 минут Спасибо, уже сделал, кому нужно, вот) //---------------------------------TwIx----------------------------------------- #include <iostream> #include <math.h> #include <stdlib.h> #include <vcl.h>
C++ Написать простую булевую функцию написать реализацию самой простой функции вычисления нелинейности одной булевой функции. Для отладки этой функции надо будет писать программу, в которой задавать какую-нибудь конкретную функцию, например, линейную или произведение переменных, а также выводить результат в файл для проверки. подробнее

Показать сообщение отдельно
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
19.04.2014, 13:33     Оператор копирования для объектов
higimo, вот отрывок возможной реализации такого динамического массива (добавление элементов, индексация и т.п. отсутствует). В нем как раз реализована схема, которую я выше описал на словах. Полностью не привожу, чтобы была возможность самому дописать\поразмышлять. Надеюсь будет полезно.
Кликните здесь для просмотра всего текста
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
#include <algorithm>
#include <memory>
#include <cstdlib>
#include <new>
 
template <typename T>
class Array
{
public:
    typedef T *       pointer_type;
    typedef T         value_type;
 
    typedef T *       iterator;
    typedef T const * const_iterator;
 
private:
    struct Memory
    {
        pointer_type start;
        pointer_type finish;
        pointer_type end_of_storage;
  
        Memory() : start(), finish(), end_of_storage() {}
    };
 
public:
    ~Array()
    {
        destroy(this->mem_.start, this->mem_.finish);
        deallocate(this->mem_.start, this->mem_.end_of_storage - this->mem_.start);
    }
 
    Array & operator=(Array const & x)
    {
        if(&x != this)
        {
            const size_t xlen = x.size();
            if(xlen > capacity())
            {
                pointer_type tmp = allocate_and_copy(xlen, x.begin(), x.end());
 
                destroy(this->mem_.start, this->mem_.finish);
                deallocate(this->mem_.start, this->mem_.end_of_storage - this->mem_.start);
 
                this->mem_.start = tmp;
                this->mem_.end_of_storage = this->mem_.start + xlen;
            }
            else if(size() >= xlen)
            {
                destroy(std::copy(x.begin(), x.end(), begin()), end());
            }
            else
            {
                std::copy(x.mem_.start, x.mem_.start + size(), this->mem_.start);
                std::uninitialized_copy(x.mem_.start + size(), x.mem_.finish, this->mem_.finish);
            }
            this->mem_.finish = this->mem_.start + xlen;
        }
        return *this;
    }
 
    iterator begin()             { return mem_.start;  }
    const_iterator begin() const { return mem_.start;  }
    const_iterator end() const   { return mem_.finish; }
    iterator end()               { return mem_.finish; }
 
    size_t capacity() const
    {
        return size_t(this->mem_.end_of_storage - this->mem_.start);
    }
    size_t size() const
    {
        return size_t(this->mem_.finish - this->mem_.start);
    }
 
private:
    pointer_type allocate(size_t n, const void * = 0)
    {
        pointer_type ret = static_cast<T *>(std::malloc(n * sizeof(T)));
        if(!ret)
        {
            throw std::bad_alloc();
        }
        return ret;
    }
    void deallocate(pointer_type p, size_t)
    {
        std::free(static_cast<void*>(p));
    }
 
    pointer_type allocate_and_copy(size_t n, const_iterator first, const_iterator last)
    {
        pointer_type result = this->allocate(n);
        try
        {
            std::uninitialized_copy(first, last, result);
            return result;
        }
        catch(...)
        {
            deallocate(result, n);
            throw;
        }
    }
 
    void construct(pointer_type p, const T & val)
    {
        ::new(static_cast<void *>(p)) T(val);
    }
    void destroy(pointer_type p)
    {
        p->~T();
    }
    void destroy(const_iterator first, const_iterator last)
    {
        for(; first != last; ++first)
            destroy(first);
    }
 
    Memory mem_;
};
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru