用于接收数组的LinkedList构造函数



试图用整数数组初始化LinkedList的构造函数。

程序将调用linked(array);它会将数组中的所有值添加到一个链表中。

LinkedList::LinkedList(int array[])
{
    headPtr->setData(array[0]); //setData method stores the integer at position 0 inside headPtr
    Node *currentPtr = headPtr;
    for (int i = 0; i < array.length(); ++i)    //for loop to add the integers to the next node
    {
        currentPtr->setNext(new Node(array[i])); //creates a new node with the integer value of array position i
    }
}

问题出在数组上。长度(来自Java),我不认为数组长度可以通过这种方式获得?

我建议您使用迭代器的习惯用法,并使构造函数成为模板化的构造函数,如下:

class LinkedList
{
    //...
    public:
    template<typename FwdIterator>
    LinkedList(FwdIterator begin, FwdIterator end)
    {
       for (;begin != end; ++begin) 
       {
          //treat begin as pointer, and *begin as dereferenced object
       }
    }
    //...
};

然后你可以这样写:

int arr[] = {1,2,3,4,5,6,7,8,9,10};
LinkedList lnklist(arr, arr+10);

不仅如此。如果您有std::vector<int>,那么您也可以使用它来构建链表,如:

std::vector<int> v;
//..
LinkedList lnklist(v.begin(), v.end());

所以使用迭代器的习惯用法给了你这么大的能力和灵活性。: -)

正如Nawaz解释的那样,使用迭代器解决方案更好。但是如果你想使用数组(静态数组),那么编译器可以自动为你推断大小。

template<size_t size>
LinkedList::LinkedList(int (&array)[size]) 
{ 
    headPtr->setData(array[0]); //setData method stores the integer at position 0 inside headPtr 
    Node *currentPtr = headPtr; 
    for (int i = 0; i < size++i)    //for loop to add the integers to the next node 
    { 
        currentPtr->setNext(new Node(array[i])); //creates a new node with the integer value of array position i 
    } 
} 

可以如下所示调用。

int arr[] = {1,2,3,4,5,6,7,8,9,10};   
LinkedList lnklist(arr);

就像其他人说的那样,获得一本好的c++入门书籍并从头到尾阅读,同时在c++模式下尝试忘记您所知道的Java知识,这不仅重要而且至关重要。他们一点也不相似。

现在,对于你的问题,可以用std::vectorsize方法来解决:

// put this with the other includes for your file
#include <vector>
LinkedList::LinkedList(const std::vector<int>& array)
{
    headPtr->setData(array[0]); //setData method stores the integer at position 0 inside headPtr
    Node *currentPtr = headPtr;
    for (int i = 0; i < array.size(); ++i)    //for loop to add the integers to the next node
    {
        currentPtr->setNext(new Node(array[i])); //creates a new node with the integer value of array position i
    }
}

如果您不想使用vector,则必须将数组的大小传递给函数:

LinkedList::LinkedList(int array[], int arrlen)
{
    headPtr->setData(array[0]); //setData method stores the integer at position 0 inside headPtr
    Node *currentPtr = headPtr;
    for (int i = 0; i < arrlen; ++i)    //for loop to add the integers to the next node
    {
        currentPtr->setNext(new Node(array[i])); //creates a new node with the integer value of array position i
    }
}

但建议使用vector版本

相关内容

  • 没有找到相关文章