阵列通过和返回

Array passing and returning

本文关键字:返回 阵列      更新时间:2023-10-16

我想知道..每当我处理数组,当我必须剪切或排序或任何东西时,然后将其返回,我将其传递给void函数,如 f(array, length, newarray)在函数声明中,我有void f(T *array, int length, T *&new array)。有更好的方法吗?

这是一些代码,我想从数组中删除重复序列:

template<class T>
void eliminate(T *niz, int duzina, T *&podniz)
{
    int ind;
    podniz = new T[duzina];
    for (int i = 0; i<duzina; i++)
    {
        ind = 0;
        for (int j = i; j<duzina; j++)
        {
            if (niz[i] == niz[j])ind++;
        }
        if (ind == 1)podniz[nova++] = niz[i];
    }
}

如评论中已经指出的,您确实需要std::vector

代码的主要问题是,实际上无法确定有多少输出元素是初始化的。访问非初始化的元素是不确定的行为,因此您将定时炸弹返回给呼叫者。

使用std::vector<T> eliminate(std::vector const&),没有这种疑问。返回的向量完全具有.size()元素。

向量也是例外安全。如果T的复制构造函数抛出,例如,您的代码将泄漏内存,例如在std::bad_alloc

当然。您可以使用指针并通过引用该功能传递数组。然后操纵数组并使用void类型从函数返回,即无需通过引用传递数组。