如何使一个函数具有三种不同的输出条件?
Posted
技术标签:
【中文标题】如何使一个函数具有三种不同的输出条件?【英文标题】:how to make one function with three different output conditions? 【发布时间】:2019-12-11 18:32:21 【问题描述】:我正在尝试使用 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;
【问题讨论】:
std::vector
使用 new
,它只是包裹在 std::allocator
中。
@NathanOliver-ReinstateMonica 那么我应该如何使用向量创建多维数组。由于某种原因我没有成功,我创建了自己的:)。
最坏的情况,使用std::vector<std::vector<int>>
。最好的情况下使用类似:***.com/a/53038618/4342498
你也可以使用***.com/a/43358434/4342498
还有boost::multi_array
【参考方案1】:
您可以使用可变参数模板来做到这一点
查看此链接:
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;
对于删除你做同样的方式
【讨论】:
虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。 有点困惑我不能用零初始化数组,我这样做return new int64_t[_Size];
不幸的是,我还不能使用这段代码,也不知道如何用零初始化数组。我不知道如何像你一样编程:)
我想通了,我很笨,我不得不反方向添加。非常感谢您的示例运行良好,我会考虑现在如何实现删除。以上是关于如何使一个函数具有三种不同的输出条件?的主要内容,如果未能解决你的问题,请参考以下文章