64,687
社区成员
发帖
与我相关
我的任务
分享
template<class T>
class Moudle
{
public:
Moudle(int param);
}
template<class T>
Moudle::Moudle(int param)
{
std::cout<<param;
}
Moudle<int> a(15);
Moudle<int> *b=new Moudle<int>(15);
Moudle<int> c[10];
Moudle<int> (*d)[10];
Moudle<int> c[10](15)
for(int i=0;i<10;i++)
d[i]=new Moudle<int>(15);
using namespace std;
template<typename T>
class Array2D //表示二维数组的类
{
public:
class Array1D //表示一维数组的类
{
public:
Array1D() = default;
T& operator[](size_t index)
{
return const_cast<T&>(static_cast<const Array1D&>(*this)[index]);
}
const T& operator[](size_t index) const
{
return arr1[index];
}
auto& CreateArr1D(size_t nums)
{
arr1.reset(new T[nums]);
return arr1;
}
Array1D(const Array1D&) = delete;
Array1D& operator=(const Array1D&) = delete;
//...
private:
unique_ptr<T[]> arr1{ nullptr };
};
Array2D(size_t dim1, size_t dim2, initializer_list<T> il = {})
{
arr2.reset(new Array1D[dim1]);
for (size_t i = 0; i < dim1; i++)
arr2[i].CreateArr1D(dim2);
//initializer array value
size_t num = il.size();
if (num > 0)
{
int i = 0;
for (auto p = il.begin(); p != il.end(); ++p)
{
i++;
arr2[((i - 1) / dim2) % dim1][(i - 1) % dim2] = *p;
}
}
}
Array1D& operator[](size_t index)
{
return const_cast<Array1D&>(static_cast<const Array2D&>(*this)[index]);
}
const Array1D& operator[](size_t index) const
{
return arr2[index];
}
Array2D(const Array2D&) = delete;
Array2D& operator=(const Array2D&) = delete;
//...
private:
unique_ptr<Array1D[]> arr2{ nullptr };
};
//Test:
int main()
{
Array2D<int> p(3, 5);
p[0][0] = 100;
p[2][4] = 200;
cout << p[0][0] << " " << p[2][4] << endl;
Array2D<int> p2(3, 5, {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15});//传入初始值
cout << p2[0][0] << " " << p2[2][4] << endl;
Array2D<string> s(2, 2, {"abc","def"});
cout << s[0][0] << " " << s[0][1] << " " << s[1][0] << " " << s[1][1] << endl;
}