2016-01-22 48 views
0

我正在创建一个名为intArray的类。它的行为应该与std :: array相同,但只能使用整数。我在构造函数中遇到了一些问题,因为在给定尺寸的情况下,我需要用零填充数组。我是不是使用std ::数组,我只是想重新创建它。用整数填充自定义整数数组

我一直在思考有n个整数(其中n是固定数组大小),它们在内存中是连续的,还有一个指向第一个整数的指针,头...然后剩下的整数可以可以通过在头指向的数据的存储位置之后获得第i个存储单元来容易地访问。

基本上,我应该如何初始化/使用零填充其构造函数中的数组?

这是实现构造函数的有效方法吗?如果是这样,有没有更好的办法?如果不是,我该如何完成这项任务?

对不起,这是一个令人困惑的问题,只是评论,如果你需要任何澄清。


这里是我的构造迄今:

(不知道如何创建 'N' 独立地为整数)

intArray::intArray(size_t n){ 

    intArray::size = n; 

    int num = 0; 
    intArray::head = num //head is an int* 

    //have no idea how to do this... 
    for(int i=0; i<n; i++){ 
     &num + 1 = 0; //trying to set next value in memory to 0 
         //obviously not gonna work! 
    }//end loop 

}//end of constructor 

我非常感谢任何答案/评论。现在让我想想如果我错过了什么,谢谢!

+1

你分配的内存?如果你把它分配在堆栈上,那么大小应该已经被修正了,你应该检查'n'是否太大。要填充一个数组,你可以使用'std :: fill_n'。 – cqdjyy01234

+0

不,不知道该怎么做......感谢您的建议! – Ibrahim

回答

2

首先,您真正在做的是重新创建vector而不是array,因为您的构造参数在编译时不需要知道。考虑到这一点,你需要使用动态内存,除非你改变了将尺寸作为模板参数并存储实际数组而不是指针的方法(这正是std::array的工作原理)。

因此,使用动态内存,构造函数变为:

intArray::intArray(size_t n) 
    : head(new int[ n ]) 
    , currentSize(n) 
{ 
    std::fill(head, head + n, 0); 
} 

如果你不想使用std::fill,则相当于循环是:

for(size_t i = 0; i < n; i++) 
{ 
    head[i] = 0; 
} 
+1

另外两种方法:'new int [n]()'和'calloc(n,sizeof(int))'。 – cqdjyy01234

+0

谢谢,这帮助我了解发生了什么事! – Ibrahim