数组传递和返回

时间:2018-04-23 12:44:46

标签: c++ arrays

我想知道..每当我处理数组时,当我必须剪切它,或者对它进行排序,或者任何事情,然后返回它时,我将它传递给像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];
    }
}

2 个答案:

答案 0 :(得分:2)

正如评论中已经提到的,你真的想要std::vector

您的代码的主要问题是无法确定实际初始化了多少输出元素。访问未初始化的元素是Undefined Behavior,因此您将向定时器返回定时炸弹。

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

Vector也是异常安全的。如果T的复制构造函数抛出,则代码将泄漏内存,例如在std::bad_alloc

答案 1 :(得分:0)

不确定。您可以使用指针并通过引用该函数来传递数组。 然后操作数组并从具有void类型的函数返回,即不需要返回数组,因为它是通过引用传递的。