所以我自己制作了一个数组课:
#include <algorithm>
template <class T>
class myArray
{
private:
int length;
T *elements;
public:
myArray()
{
this->length = 0;
this->elements = nullptr;
}
myArray(int len)
{
this->length = len;
this->elements = new T[len];
}
myArray(int* data, int len)
{
this->length = len;
this->elements = new T[len];
std::copy(data, data+len, this->elements);
}
~myArray()
{
delete[] this->elements;
}
};
我认为现在它有效。我想检查我在第3个构造函数中传递的元素是否被正确复制,所以我写了这个:
int data[] = {1,2,3,4,5};
myArray<int> a (data, 5);
for (auto x: myArray)
{
std::cout << x << '\n';
}
问题是我必须在课堂上写一下,当我打电话给myArray
时,让它返回this-&gt;元素。我知道这可能是微不足道的,但我不知道如何找到它,实际上如何调用它,让Google为我找到答案。
答案 0 :(得分:4)
您需要为您的类实现begin
和end
成员函数(或者作为与您的类在同一名称空间中的全局函数),它返回指向第一个元素的迭代器,以及一个超过数组的最后一个元素。由于您的类由连续数组支持,因此您不需要实现迭代器类,只需使用指针。
// these are member functions, as they would be defined inside your class
T* begin() {
return elements;
}
T* end() {
return elements + length;
}
您还应该实现const版本。
T const* begin() const {
return elements;
}
T const* end() const {
return elements + length;
}