[英]Sparse Arrays And Matrices
我需要一个程序的帮助,该程序允许用户对数组的任何条目进行随机读取访问。 如果用户尝试在有用区域之外进行读取,则您的数据结构应返回0。此外,它还允许用户仅对有用区域进行随机写访问。 如果用户尝试在应该为0的数组部分中写入内容,则输出错误消息。 此外,程序应具有仅将数组参数作为输入并将其初始化为0的构造函数。第二个构造函数应另外将一个int数组作为输入,将其值复制到要制作的数组的有用部分。
这是数组的形式
[ 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;
}
有趣的是,我相信我们处于同一个阶级。 但是,听着,当您将数组动态初始化为某个用户选择的大小( int N;
)和全零时,您可能已经创建了稀疏数组。
由于您立即将所有N个元素都填充为零,因此您开始了稀疏数组。 在构造函数完成第一个操作之后,析构函数会自动(如果您构建了析构函数的话)会清除数组中的所有内存。 因此,您有一个准备好接收N个元素的N个元素槽阵列。 但是,在此之前,所有N个元素插槽区域基本上都是空的,因此不使用任何内存。 但是该数组仍然存在,因此您的稀疏数组。
我认为向量类加一些if
应该做您想做的所有事情,则无需重新创建它。 您可以使用两个向量,一个向量存储元素,另一个向量存储它们的位置。
vector<int> values,positions;
int c,success;
cout<<"Insert element"<<endl;
cin>>c;
positions.push_back(c);
cout<<"Insert value"<<endl;
cin>>c;
values.push_back(c);
cout<<"Which element you want to read?"<<endl;
cin>>c;
success=0;
for(int i=0;i<values.size();;i++){
if(positions[i]==c){
cout<<values[i]<<endl;
success=1;
}
if(success==0)
cout<<"Out of bounds: 0"<<endl;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.