对于学校作业,我想构建一个自定义数组容器,因为我不允许使用std或任何可用库提供的容器,而允许自制。
到目前为止,我所拥有的一切正在发挥作用,但是一旦达到极限,我想要将数组大小加倍。我怎么能这样做,我能找到的只是使用矢量(我不允许)。
#ifndef UTILS_ARRAY_HEADER_INCLUDED
#define UTILS_ARRAY_HEADER_INCLUDED
#include <array>
namespace utils
{
template <class T>
struct Array
{
private:
int count = 0;
int size = 1;
std::array<T, 1> myArray;
void doubleSize();
public:
T* begin();
T* end();
T& operator[] (int);
void addItem(T const);
};
template <class T>
T* Array<T>::begin()
{
return &myArray[0];
}
template <class T>
T* Array<T>::end()
{
if (&myArray[count])
return &myArray[count];
return &myArray[0];
}
template <class T>
T& Array<T>::operator[] (int key)
{
return myArray[key];
}
template <class T>
void Array<T>::addItem(T const item)
{
if (count >= 0 && count < size)
{
myArray[count] = item;
count++;
}
else {
doubleSize();
}
return;
}
template <class T>
void Array<T>::doubleSize()
{
// ?
/*size = size * 2;
const int newsize = 2;
std::array<T, newsize> newArray; // not working.
std::copy(std::begin(myArray), std::end(myArray), std::begin(newArray));
myArray = newArray;*/
}
}
#endif
答案 0 :(得分:1)
您需要属性:
在AddItem中检查current_size&lt; current_capacity。如是, 创建大小为currernt_capacity * 2的new_data,复制每个项目,删除旧数据并替换指针。
记得要删除数据;在析构函数中。我不会给你更多的代码,这是你的功课。
结帐valgrind以检查您的代码是否没有泄漏内存。
答案 1 :(得分:0)
我怀疑std::array<T, 1>
也不允许。但这不是一个真正的问题:你无论如何都不能使用array
,因为它有一个固定的大小。
您需要存储T* begin
,size_t current_size
和size_t size_in_use
。