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

Создать абстрактный тип данных - класс вектор, который имеет указатель на long, число элементов и переменную состояния - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ввод строки с пробелами произвольной длины http://www.cyberforum.ru/cpp-beginners/thread856368.html
Помогите, пожалуйста. Нужно ввести строку произвольной длины с пробелами и различными символами. Мой код: char *s; s=new char; cout<<"vvedite stroku: "; cin>>s; cout<<s<<endl;
C++ Дано действительное число а, не пользуясь ни какими другими арифметическими операциями, кроме умножения получить а^5 и а^13 за 5 операция 1 )Дано действительное число а, не пользуясь ни какими другими арифметическими операциями, кроме умножения получить а^5 и а^13 за 5 операция http://www.cyberforum.ru/cpp-beginners/thread856362.html
C++ Исключение для шаблона
Здравствуйте ! У меня следующий вопрос : Есть база данных, написан шаблон ввода для нее template <typename T> friend std::ostream& operator<<( std::ostream& os, Array<T>& cont){// for(int i=0;i<cont.len();i++){ os<<cont.get(i)<<"\t"; os<<'\n'; } return os; };
C++ Шаблонные функции и классы
Добрый день. У меня возникли проблемки при использование шаблонных функций. Вот код class LineTable{ private: AnsiString lname; AnsiString ltype; vector<int> lvalue; vector<float> flvalue; vector<double> dlvalue;
C++ Одномерный массив. Вычислить значение функции для отрицательных элементов массива и подсчитать их количество http://www.cyberforum.ru/cpp-beginners/thread856331.html
Дано одномерный массив Р состоящий из 32 элементов. Вычислить значение функции для отрицательных элементов массива и подсчитать их количество. Помогите с решением в С++. :) Зарание спасибо. :good:
C++ Классы и наследование Помогите написать программу, в которой описана иерархия классов: геометрические фигуры(ромб, параллепипед, эллипс). Реализовать методы вычисления площади и периметра фигуры. Продемонстрировать работу всех методов классов, пердоставив пользователю выбор типа фигуры для демонстрации. подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2915 / 1344 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
05.05.2013, 15:33     Создать абстрактный тип данных - класс вектор, который имеет указатель на long, число элементов и переменную состояния
Цитата Сообщение от AnGie Посмотреть сообщение
инициализирует номером в массиве
Так делать не стоит, конечно, ну да ладно.
Цитата Сообщение от AnGie Посмотреть сообщение
В переменную состояния устанавливать код ошибки, когда не хватает памяти, выходит за пределы массива.
Это надо делать исключениями, а не "переменными состояния".

Ну, как-то так.
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
#include <iostream>
#include <stdexcept>
 
class VectorOfLong {
 public:
  VectorOfLong() : size(1), data(new long int[size]()) {}
  VectorOfLong(size_t size) : size(size), data(new long int[size]) {
    for (size_t i = 0; i < size; ++i) {
      data[i] = i;
    }
  }
  VectorOfLong(int size, long int initializer) : size(size),
    data(new long int[size]) {
    setAllTo(initializer);
  }
  VectorOfLong(const VectorOfLong &other) {
    copyFrom(other);
  }
  VectorOfLong &operator=(const VectorOfLong &other) {
    return copyFrom(other);
  }
  virtual ~VectorOfLong() {
    delete [] data;
  }
  long int &get(size_t position) {
    if (position >= size) {
      throw std::out_of_range("index went out of range");
    }
    return data[position];
  }
  const long int &get(size_t position) const {
    if (position >= size) {
      throw std::out_of_range("index went out of range");
    }
    return data[position];
  }
  void set(size_t position) {
    if (position >= size) {
      throw std::out_of_range("index went out of range");
    }
    data[position] = 0;
  }
  void set(size_t position, long int value) {
    if (position >= size) {
      throw std::out_of_range("index went out of range");
    }
    data[position] = value;
  }
  size_t getSize() const { return size; }
  void setAllTo(long int value) {
    for (size_t i = 0; i < size; ++i) {
      data[i] = value;
    }
  }
  VectorOfLong &copyFrom(const VectorOfLong &other) {
    if (this != &other) {
      size = other.size;
      delete [] data;
      data = new long int[size];
      for (size_t i = 0; i < size; ++i) {
        data[i] = other.data[i];
      }
    }
    return *this;
  }
  static size_t getMaximumSize() { return static_cast<size_t>(-1); }
 private:
  size_t size;
  long int *data;
};
 
std::ostream &operator<<(std::ostream &stream, const VectorOfLong &v) {
  stream << "[";
  for (size_t i = 0; i < v.getSize(); ++i) {
    stream << v.get(i);
    if (i < v.getSize() - 1) stream << ", ";
  }
  return stream << "]";
}
 
int main(int argc, char *argv[]) {
  VectorOfLong v(10);
  v.set(9);
  v.set(3, 4);
  std::cout << v << std::endl;
  return 0;
}
 
Текущее время: 07:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru