动态模板数组
Dynamic template arrays
我想要一个模板类包含两个模板动态数组作为成员变量。我还使用一个成员函数来给它们赋值。然而,我得到的问题与代码,我不知道的原因(可能是语法)。下面代码中的问题是什么?
template<typename T>
class ArrayHolder
{
public:
ArrayHolder();
void setArrays( T [], T [],int,int);
private:
T *array1;
T *array2;
};
template<typename T>
ArrayHolderHolder<T>::setArrays(T firstarray[],T secondarray[] ,int N1, int N2)
{
array1 = new T[N1];
array2 = new T[N2];
}
setArrays中动态数组初始化后,从参数(firstarray,secondarray)中复制数组到它们的最有效方式是什么?
ArrayHolderHolder<T>::setArrays(T firstarray[],T secondarray[] ,int N1, int N2)
^^^^^^^^^^^^^^^^^
这里有一个错别字。类名是ArrayHolder
,不是ArrayHolderHolder
。而且,你没有写返回类型。
由于不能(按值)传递数组,最好在形参列表中使用指针表示法函数,并且由于它是类模板,最好在类本身中定义函数:
template<typename T>
class ArrayHolder
{
public:
ArrayHolder();
void setArrays(T *firstarray,T *secondarray ,int N1, int N2)
{
array1 = new T[N1];
array2 = new T[N2];
//if you want to copy, then use `std::copy` as:
std::copy(firstarray, firstarray + N1, array1);
std::copy(secondarray, secondarray + N2, array2);
}
private:
T *array1;
T *array2;
};
顺便说一下,您可以使用st::vector
来代替原始数组:
std::vector<T> array1;
std::vector<T> array2;
setArrays
的参数表也是如此。如果你这样做,那么setArray
将变成这样:
void setArrays(const std::vector<T> & first, const std::vector<T> & second)
{
//maybe you need to do this!
array1.clear();
array2.clear();
array1.insert(array1.end(), first.begin(), first.end());
array2.insert(array2.end(), second.begin(), second.end());
}
很简单,不是吗?没有内存分配,没有内存回收!或者更好的是,如果你按值接受参数,那么你可以这样写:
void setArrays(std::vector<T> first, std::vector<T> second)
{
//no need to clear!
array1.swap(first);
array2.swap(second);
}
最后一个实现是库实现者首选的惯用解决方案。
除了@Nawaz回答:在setArrays()定义之前忘记了void
返回类型
std::copy是最有效的方法。http://www.cplusplus.com/reference/algorithm/copy/
std::copy(firstarray, firstarray + N1, array1);
std::copy(secondarray, secondarray + N2, array2);
当然,这只是在您坚持使用数组的情况下。我个人总是使用标准模板库中的容器。在这种情况下,我将使用std::vector,但要各自使用。
相关文章:
- std::向量与传递值的动态数组
- 将数组动态分配到具有指针参数的函数中
- 我可以以某种方式使我的矢量/数组动态更改装置数量吗?
- 使用 new: "potentially uninitialized pointer"将对象数组动态分配给指针
- 为什么C 没有方便的方式来为多维数组动态分配内存
- 如何制作具有动态大小的数组?动态数组的一般用法(可能还有指针)
- c++中的数组动态内存分配
- 多维数组动态分配的内存图
- 如何在 c++ 中使用 2-D 固定数组为 4-D 数组动态分配内存
- C++ 我在数组/动态内存方面遇到了一些问题
- C++ 中从数组动态强制转换
- C++中高维数组动态内存分配的正确方法.
- 从 C++ 结构中包含的指针数组动态分配和访问内存
- 对象数组动态内存分配
- 为二维数组动态分配内存时出错
- 如何将2d数组动态分配给结构
- 为结构数组c++动态分配内存
- 将数组动态添加到多维数组
- 类中的类数组-动态数组(c++)有问题
- 分配对象数组动态冻结