如何将两个代码合并为一个函数?

问题描述 投票:0回答:1

我的代码创建了数组,我需要对其进行删除,但我不知道如何精美而正确地进行。

主要代码

template<class T1>
auto auto_vector(T1&& _Size) {
    return new int64_t[_Size]{};
}
template <class T1, class... T2>
auto auto_vector(T1&& _Size, T2&&... _Last)
{
    auto result = new decltype(auto_vector(_Last...))[_Size];
    for (int64_t i = 0; i < _Size; ++i) {
        result[i] = auto_vector(_Last...);
    }
    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;
}
int main()
{
    auto map1 = auto_vector(_Size, _Size2, _Size3);

    auto map2 = auto_vector(3, 4, 5, 7);

    del_vector(map1, _Size, _Size2, _Size3);

    return 0;
}

我不喜欢这个选项,我想要类似的东西。

int main()
{
    auto_vector map1(_Size, _Size2, _Size3);

    del_vector map1(_Size, _Size2, _Size3);

    //or so

    auto_vector<_Size, _Size2, _Size3> map1;

    del_vector<_Size, _Size2, _Size3> map1;

    return 0;
}

之所以这样做,是因为我不能仅使用向量来实现同一件事而且我不明白向量为何不适用于动态阵列,事实是我不知道确切的数据_Size, _Size2, _Size3 = ?编译之前。

因此,我只使用new,而我只为他着想。

如果对测试数据有用的话

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 << map1[i][k][j] << " ";
            }
            cout << endl;
        }
        cout << endl;
    }
    cout << " ---------TEST---------- " << endl;
c++
1个回答
0
投票

代码中的new操作过多。同样,del_vector在您的首选版本中没有任何意义,因为任何体面的类都会在析构函数中释放其数据(除非它没有所有权)。

您需要做一个包装完事情的类或模板类。

template<size_t dim>
class myMultiArray
{
     public:
     A(std::array<size_t, dim> sizes); // resizes m_data to multiplication of sizes
     int  operator ()  (std::array<size_t, dim> indexes) const; // access operator
     int& operator ()  (std::array<size_t, dim> indexes); // modify operator
     // you'll probably need more utility functions for such a multi dimensional array
     private:
     std::vector<int> m_data;
     std::array<size_t, dim> m_sizes;
}
© www.soinside.com 2019 - 2024. All rights reserved.