试图用整数数组初始化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::vector
和size
方法来解决:
// 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
版本