البته در ++c میشه با overload کردن عملگر ها از جمله عملگر [] این کار را انجام داد. در مورد دلفی بذارید اساتید عزیز دلفی کار پاسخ بدهند
در مثال زیر این کار با ++c انجام شده اگرچه هنوز نواقصی در برنامه هست
یکبار یک ماتریس 5 در 6 درست می کنیم و از سطر 2 تا 3 و از ستون 2 تا 3 برابر 7 قرار می دهیم
در مورد دومی ستون دوم مقدار 8 می گیرد
#include <vector>
#include <iostream>
#include <initializer_list>
using namespace std;
struct Matrix
{
typedef vector<vector<int> > matrix;
typedef vector<int> vec;
vec indexmat;
vec indexvec;
matrix mymat;
int ctr=0;
Matrix(int rows,int cols):mymat(matrix(rows,vec(cols))) {}
Matrix& operator[](std::initializer_list<int> il)
{
if(++ctr==1) indexmat=il;
else indexvec=il;
return *this;
}
Matrix& operator=(const int& val)
{
int m1,m2,v1,v2;
if (indexmat.size())
{
m1=indexmat[0];
m2=indexmat[indexmat.size()-1];
}
else
{
m1=0;
m2=mymat.size()-1;
}
if (indexvec.size())
{
v1=indexvec[0];
v2=indexvec[indexvec.size()-1];
}
else
{
v1=0;
v2=mymat[0].size()-1;
}
for(int i=m1; i<=m2; i++)
for(int j=v1; j<=v2; j++)
mymat[i][j]=val;
return *this;
}
friend ostream& operator<<(ostream& stream, Matrix& mtx)
{
for(int i=0; i<mtx.mymat.size(); i++)
{
for(int j=0; j<mtx.mymat[0].size(); j++)
stream<<mtx.mymat[i][j]<<" ";
stream<<endl;
}
return stream;
}
};
int main()
{
Matrix m(5,6);
m[{2,3}][{2,3}]=7;
cout<<m;
Matrix m1(5,6);
m1[ {}][{2}]=8;
cout<<m1;
}