gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:29:18 24 4
gpt4 key购买 nike

我正在尝试使用 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;
}

对于删除你做同样的事情

关于c++ - 如何使一个函数具有三种不同的输出条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59292018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com