我想知道..每当我处理数组时,当我必须剪切它,或者对它进行排序,或者任何事情,然后返回它时,我将它传递给像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];
}
}
答案 0 :(得分:2)
正如评论中已经提到的,你真的想要std::vector
。
您的代码的主要问题是无法确定实际初始化了多少输出元素。访问未初始化的元素是Undefined Behavior,因此您将向定时器返回定时炸弹。
std::vector<T> eliminate(std::vector const&)
,没有这样的疑问。返回的向量具有完全.size()
个元素。
Vector也是异常安全的。如果T
的复制构造函数抛出,则代码将泄漏内存,例如在std::bad_alloc
。
答案 1 :(得分:0)
不确定。您可以使用指针并通过引用该函数来传递数组。 然后操作数组并从具有void类型的函数返回,即不需要返回数组,因为它是通过引用传递的。