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

Ошибка после удаления элемента из массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ описать классы http://www.cyberforum.ru/cpp-beginners/thread1048844.html
Помогите пожалуйста написать программу.ТЗ:Написать программу,в которой описана иерархия классов:человек("дошкольник","школьник","студент","работающий").Базовый класс должен иметь поля для хранения ФИО,возраста,пола, а так же методы получения среднего дохода в денежном эквиваленте.Продемонстрировать работу всех методов классов,представив пользователю выбор типа объекта.
C++ 32-разрядный символьный массив Как представить в виде 32 разрядного символьного Массива целое число?O_o http://www.cyberforum.ru/cpp-beginners/thread1048840.html
C++ Напишите программу которая выводит 10 случайных чисел и распределяет их в порядке убывания.
Напишите программу которая выводит 10 случайных чисел и распределяет их в порядке убывания.
Вывести сумму чисел каждого ряда матрицы C++
Напишите программу которая заполняет массив (3 ряда и 3 колонны) случайными числами, а так же: a) выводит сумму чисел каждого ряда b) выводит сумму чисел каждой колонны c) выводит сумму всех чисел
C++ Вывести на экран количество элементов матрицы А, которые представлены возрастающей последовательностью цифр http://www.cyberforum.ru/cpp-beginners/thread1048810.html
Дана матрица А, состоящая из М строк и N столбцов. Элементами матрицы являются натуральные числа. Вывести на экран количество элементов матрицы А, которые представлены возрастающей последовательностью цифр
C++ Сформировать из матрицы А матрицу В по следующий правилам: Помогите решить задачу!!!!! Добавлено через 2 минуты Текст задания!!! тексты заданий перепечатываем на форум. читаем правила Добавлено через 1 час 3 минуты ЗАДАНИЕ подробнее

Показать сообщение отдельно
Керра
1276 / 444 / 45
Регистрация: 24.08.2011
Сообщений: 2,133

Ошибка после удаления элемента из массива - C++

19.12.2013, 20:17. Просмотров 268. Ответов 2
Метки (Все метки)

После функции Delete выводится уже далеко не то, что должно было остаться, компилятор не пишет ничего вразумительного. В чем ошибка?
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
#include "stdafx.h"
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <conio.h>
 
template <class Type>
class Array
{
private:
    Type *theArray;
    int size;
    Type operator[](int n) const; // возвращает значение элемента с порядковым номером n
public:
    Array(); // конструктор по умолчанию
    Array(Type); // конструктор по значению информационного поля
    Array(const Array &); // конструктор-копировщик
    ~Array(); // деструктор
    int GetSize() const; // возвращает размер массива
    void operator += (Type value); // добавляет в конец элемент value
    void Print() const; // выводит на экран
    void Add(Type value); // добавляет в конец элемент value
    int Find(Type value) const; // находит номер элемента (номера начиная с 1), если такого элемента нет, 0
    void Delete(int); // удаляет элемент с заданным номером (номера начиная с 1)
};
 
int main()
{
    Array<int> a(5); // инициализируем массив элементом 5
    a += 6; // добавляем элемент 6
    a.Add(7); // добавляем элемент 7
    a.Print(); // выводим на экран
    cout << "Nomer elementa '7': " << a.Find(7) << endl;
    cout << "Nomer elementa '3': " << a.Find(3) << endl;
    cout << "Udalim element nr.2..." << endl;
    a.Delete(2);
    a.Print();
    getch();
    return 0;
}
 
template <class Type> // конструктор по умолчанию
Array<Type>::Array(): size(0), theArray(NULL)
{
}
 
template <class Type> // конструктор по значению информационного поля
Array<Type>::Array(Type value): size(1)
{
    theArray = new Type;
    theArray[0] = value;
}
 
template <class Type> // конструктор-копировщик
Array<Type>::Array(const Array &theObject)
{
    size = theObject.GetSize();
    theArray = new Type[size];
    for (int i = 0; i < size; i++)
        theArray[i] = theObject[i]; // и копируем все элементы
}
 
template <class Type> // возвращает размер массива
int Array<Type>::GetSize() const
{
    return size;
}
 
template <class Type> // возвращает значение элемента с порядковым номером n
Type Array<Type>::operator[](int n) const
{
    return theArray[n];
}
 
template <class Type>
void Array<Type>::operator+=(Type value)
{
    Array<Type> tmp(*this); // сохраняем текущий массив
    delete [] theArray; // освобождаем память
    size++; // увеличиваем размер
    theArray = new Type[size]; // создаем новый массив
    for (int i = 0; i < size-1; i++)
        theArray[i] = tmp[i]; // копируем уже имеющиеся элементы
    theArray[size-1] = value; // и добавляем новый
}
 
template <class Type> // деструктор
Array<Type>::~Array()
{
    delete [] theArray;
}
 
template <class Type>
void Array<Type>::Print() const
{
    cout << "Size: " << size << endl << "Array: ";
    for (int i = 0; i < size; i++)
        cout << theArray[i] << " ";
    cout << endl;
}
 
template <class Type>
void Array<Type>::Add(Type value)
{
    Array<Type> tmp(*this); // сохраняем текущий массив
    delete [] theArray; // освобождаем память
    size++; // увеличиваем размер
    theArray = new Type[size]; // создаем новый массив
    for (int i = 0; i < size-1; i++)
        theArray[i] = tmp[i]; // копируем уже имеющиеся элементы
    theArray[size-1] = value; // и добавляем новый
}
 
template <class Type>
int Array<Type>::Find(Type value) const
{
    for (int i = 0; i < size; i++)
        if (theArray[i] == value)
            return i+1;
    return 0;
}
 
template <class Type>
void Array<Type>::Delete(int n)
{
    if ((n < 1) || (n > size))
        return;
    Array<Type> tmp;
    for (int i = 0; i < size; i++)
        if (i != n-1)
            tmp.Add(theArray[i]);
    delete [] theArray;
    size--;
    for (int i = 0; i < size; i++)
        theArray[i] = tmp[i];
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru