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

класс для массива - C++

Восстановить пароль Регистрация
 
yardie
 Аватар для yardie
8 / 8 / 0
Регистрация: 14.07.2010
Сообщений: 166
22.12.2010, 21:54     класс для массива #1
написать класс для массива с проверкой границ
должны быть проверки на выход за пределы массива +операции +удаления, +добавления, +доступа и +копирования, +инциализации
и ещё если возможно, написать тесты для этого класса

Добавлено через 1 час 22 минуты
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
#include <iostream>
using namespace std;
 
class Mass()
{
private:
int g;
int i;
int n;
 
public:
    void mas(int G, int I, int N)
    {   g=G;
        i=I;
        n=N;
    }
    void mas1()
{
cout<< "Enter massive size: ";
cin>> g
}
void mas2()
{   int i;
    i=g;
    int a[i];
    cout<< "Enter massive: ";
    for (int k=0; k<i; k++)
cin>> a[i]
}
void mas3()
    int n;
    cout <<"Enter number to delete";
cin >> n;
delete [n]a;
};
Добавлено через 42 секунды
тут я полностью не смог реализовать, помогите доделать, заранее СПАСИБО)))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
23.12.2010, 01:35     класс для массива #2
Не понятно, что вам надо. Пишите грамотней. У меня завалялся вот такой простенький. Пойдет?
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
/*
  написать класс для массива с проверкой границ
  должны быть проверки на выход за пределы массива +операции +удаления,
  +добавления, +доступа и +копирования, +инциализации
  и ещё если возможно, написать тесты для этого класса
*/
 
#include <cstddef>
#include <cassert>
#include <cstdio>
 
class Vector {
 public:
  Vector() : size_(0), data_(NULL) {}
  explicit Vector(size_t size) : size_(size), data_(new int[size]) {}
  ~Vector() {
  }
 
  int& At(const size_t &position) const {
    assert(position < size_ && position >= 0);
    return data_[position];
  }
 
  void Clear() {
    if (data_ != NULL) {
      delete [] data_;
      data_ = NULL;
      size_ = 0;
    }
  }
 
  void CopyTo(Vector& other) {
    other.Clear();
    for (size_t i = 0; i < size_; ++i)
      other.PushBack(At(i));
  }
 
  void CopyFrom(const Vector& other) {
    Clear();
    for (size_t i = 0; i < other.Size(); ++i)
      PushBack(other.At(i));
  }
 
  void Erase(size_t position) {
    assert(position < size_ && position >= 0 && size_ > 0);
    size_t new_size = size_ - 1;
    if (new_size == 0) {
      delete [] data_;
      data_ = NULL;
    } else {
      int *new_data = new int[new_size];
      for (size_t i = 0; i < position; ++i)
        new_data[i] = data_[i];
      for (size_t i = position+1; i < new_size; ++i)
        new_data[i] = data_[i+1];
      delete [] data_;
      data_ = new_data;
      size_ = new_size;
    }
  }
 
  void Insert(size_t position, int value) {
    size_t new_size = size_+1;
    assert(position < new_size && position >= 0);
    int *new_data = new int[new_size];
    for (size_t i = 0; i < position; ++i)
      new_data[i] = data_[i];
    new_data[position] = value;
    for (size_t i = position+1; i < new_size; ++i)
      new_data[i] = data_[i-1];
    if (data_ != NULL)
      delete [] data_;
    data_ = new_data;
    size_ = new_size;
  }
 
  void PushBack(int value) {
    Insert(size_, value);
  }
 
  inline size_t Size() const { return size_; }
 
  int& operator[](const size_t &position) {
    assert(position < size_ && position >= 0);
    return data_[position];
  }
 
 private:
  size_t size_;
  int *data_;
};
 
int main(int argc, char* argv[]) {
  Vector test_vector, second_vector;
  for (int i = 0; i < 10; ++i)
    test_vector.Insert(0, i);
  for (int i = 0; i < 10; ++i)
    test_vector.PushBack(i);
  test_vector.Erase((test_vector.Size()-1)/2);
  second_vector.CopyFrom(test_vector);
  second_vector.CopyTo(test_vector);
 
  for (size_t i = 0; i < test_vector.Size(); ++i)
    printf("%d ", test_vector[i]);
  printf("\n");
  
  int exit_key;
  scanf("%d", &exit_key);
  return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.12.2010, 01:45     класс для массива #3
Вектор наподобие STL
Можешь и оттуда попробовать что-нибудь взять)
yardie
 Аватар для yardie
8 / 8 / 0
Регистрация: 14.07.2010
Сообщений: 166
23.12.2010, 09:32  [ТС]     класс для массива #4
lemegeton, пойдёт, это у тебя с STL, а как-нибудь проще этот класс сделать можно?
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
23.12.2010, 13:02     класс для массива #5
Какой STL?! Где ты в моем коде вообще шаблон увидел? Это одна из самых примитивных реализаций динамического массива. Проще уже некуда.
yardie
 Аватар для yardie
8 / 8 / 0
Регистрация: 14.07.2010
Сообщений: 166
23.12.2010, 16:15  [ТС]     класс для массива #6
хых, спасибо)
Yandex
Объявления
23.12.2010, 16:15     класс для массива
Ответ Создать тему

Метки
вектор, классы
Опции темы

Текущее время: 18:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru