如何使一个函数具有三种不同的输出条件?

how to make one function with three different output conditions?

本文关键字:输出 条件 有三种 何使一 函数      更新时间:2023-10-16

我正在尝试使用 new 实现动态数组,因为标准 std 库没有。 这是我的代码。

template <class T1, class T2, class T3>
auto auto_vector(T1& _Size, T2& _Size2, T3& _Size3) {
auto result = new int64_t **[_Size3];
for (ptrdiff_t i = 0; i < _Size3; ++i) {
result[i] = new int64_t *[_Size2];
for (ptrdiff_t k = 0; k < _Size2; ++k) {
result[i][k] = new int64_t [_Size]{};
}
}
return result;
}

这就是我删除数组的方式

template <class T1, class T2, class T3, class T4>
void del_vector(T4& _Del, T1& _Size, T2& _Size2, T3& _Size3) {
for (ptrdiff_t i = 0; i < _Size3; ++i) {
for (ptrdiff_t k = 0; k < _Size2; ++k) {
delete _Del[i][k];
}
delete _Del[i];
}
delete _Del;
}

我可以使用它来创建具有三个选项卡的多维数组。 这样

auto tor3 = auto_vector(_Size, _Size2, _Size3);

但是我也想创建具有两个或四个选项卡的其他数组,或者突然之间我需要创建一个 10x 多维数组。如果突然我失去理智 这样

int _Size, _Size2, _Size3, _Size4, _Size5; 
_Size = _Size2 = _Size3 =_Size4 = _Size5 = 4;

auto tor2 = auto_vector(_Size, _Size2);
auto tor1 = auto_vector(_Size);
auto tor10 = auto_vector(_Size,_Size2,_Size3,_Size4,_Size5);

我怎样才能从我的函数中创建一个可以完成所有这些操作的函数,是否可以做到这一点?

cout << " ---------TEST---------- " << endl;
for (ptrdiff_t i = 0; i < _Size3; ++i) {
for (ptrdiff_t k = 0; k < _Size2; ++k) {
for (ptrdiff_t j = 0; j < _Size; ++j) {
cout << _Tor[i][k][j] << " ";
}
cout << endl;
}
cout << endl;
}
cout << " ---------TEST---------- " << endl;

您可以使用可变参数模板执行此操作

请参阅此链接:

https://eli.thegreenplace.net/2014/variadic-templates-in-c/

请参阅示例:

template<class T1>
auto auto_vector(T1&& _Size) {
return new int64_t[_Size];
}
template <class T1, class... TT>
auto auto_vector(T1&& _Size, TT&&... r)
{
auto result = new decltype(auto_vector(r...))[_Size];
for (int64_t i = 0; i < _Size; ++i) {
result[i] = auto_vector(r...);
}
return result;
}
int main()
{
auto x = auto_vector(2,2,2,2);
return 0;
}

对于删除,您以相同的方式进行操作