Мне нужна помощь с программой, которая позволяет пользователю произвольно читать доступ к любой записи массива. Если пользователь пытается прочитать за пределами полезной области, ваша структура данных должна вернуть 0. Также он позволяет произвольному произвольному доступу записи к полезной области. Если пользователь пытается записать что-то в той части массива, которая должна быть 0, напечатайте сообщение об ошибке. , кроме того, программа должна иметь конструктор, который принимает параметры массива только как входные данные и инициализирует весь массив равным 0. Второй конструктор должен дополнительно принимать в качестве входных данных массив из ints, копируя его значения в полезную часть массива, который вы делаете ,Редкие массивы и матрицы
Это форма массива
[ 0 0 0 0 ... 0 0 1 2 3 4 5 0 0 .... 0 0 ]
Я не знаю, как создать разреженный массив, и я не хочу использовать существующие библиотеки.
Я попытался создать динамический массив, в котором используется оператор Overload, но моя проблема в том, что я даже не знаю, что такое разреженный массив и как его создать.
#include <iostream>
using namespace std;
class MyArray
{
friend ostream& operator<< (ostream &os, MyArray &array);
public:
MyArray (int size);
MyArray (const MyArray &rhs);
~MyArray();
MyArray& operator= (const MyArray& rhs);
int& operator[] (int index);
int read_element (int index);
void write_element (int index, int value);
private:
int *storage;
int size;
};
#include "sparse_array_1d.h"
MyArray::MyArray (int size)
{
storage = new int[size];
this->size = size;
}
MyArray::MyArray (const MyArray &rhs)
{
size = rhs.size;
storage = new int[size];
(*this) = rhs;
}
MyArray::~MyArray()
{
delete [] storage;
}
int MyArray::read_element (int index)
{
return storage[index];
}
void MyArray::write_element (int index, int value)
{
storage[index] = value;
}
MyArray& MyArray::operator= (const MyArray &rhs)
{
int i,min_size;
if (size < rhs.size)
min_size = size;
else
min_size = rhs.size;
for (i=0; i<min_size; i++)
storage[i] = rhs.storage[i];
return (*this);
}
int& MyArray::operator[] (int index)
{
if (index < size && index >=0)
return storage[index];
return storage[0];
}
ostream& operator<< (ostream &os, MyArray &array)
{
int i;
os << "[ ";
for (i=0; i<array.size; i++)
os << array[i] << " ";
os << "]" << endl;
return os;
}
#include <iostream>
#include "sparse_array_1d.h"
using namespace std;
int main()
{
int i,size;
cout << "What array sizes would you like?" << endl;
cin >> size;
MyArray p1 (size);
//int q=1;
for (i=0; i<size; i++)
{
p1[i] = 0;
//q++;
}
cout << "p1: " << endl;
cout << p1;
int x;
cout << endl;
cout << "enter numbers : " << endl;
for (i=0 ; i<size; i++)
{
cin >> p1[i];
}
cout << "This is the array" << endl;
cout << p1;
cout << endl;
return 0;
}
Каков ваш конкретный вопрос? –
Кажется, вы хотите хэш-набор. –
Я просто не знаю, как инициализировать весь массив до 0. Также я действительно не понимаю, как работает разреженный массив – toky