我可以用花括号构造一个链表吗?
Can i construct a linked list with curly braces?
我对面向对象的c++相当陌生,我试图用这种方式为链表创建一个构造函数:
在List.h的某个地方,我们应该有这个:
struct Node
{
int data;
Node *next;
};
然后在main.cpp中,我希望能够像这样构建一个列表:
int main()
{
List A({1,2,3,4,5,6});// I want the amount of numbers to indicate the size of
//the list and the numbers to go into each node in order
return 0;
}
我的问题是,我可以创建这样一个构造函数吗?如果是,那又是怎样的呢?我必须使用模板做这个吗?我试图找到一个这样的问题在SO回答,但他们都包括模板,我还没有学会。如果我可以让我的构造函数做到这一点,有没有可能做到这一点,而不使用模板?
你可以这样做(使用c++ 11)。
你需要定义一个带std::initializer_list<int>
的构造函数。(是的,这是一个模板,但我会告诉你如何使用它。: -)
std::intitializer_list<int>
-构造函数的可能实现如下:
//in class List:
List (std::initializer_list<int> init) {
for (auto v : init)
this->emplace_back(v);
}
你必须自己实现emplace_back
作为练习。emplace_back
应该构造一个新的Node
,并将其附加到List
上。这将是一个有用的成员函数(我保证)。
可能不重要的通知:如果emplace_back
执行堆分配,这段代码可能会泄漏。在这种情况下,委托给一个将List
置于有效状态的构造函数,这样析构函数就可以释放所有堆分配的Nodes
。如果您不理解这一点,那么它很可能对您的应用程序不太重要。
您需要一个接受std::initializer_list
的构造函数。示例如下:http://en.cppreference.com/w/cpp/utility/initializer_list
不完全是。我相信在花括号中声明数字列表会混淆编译器。最好声明一个int数组,并将其传递给一个构造函数,该构造函数接受一个int数组和一个size变量。
int aray[] = {5,6,11,22,11};
int size = sizeof(aray)/sizeof(int);
MyList(size,aray);
- 链表,将列表复制到另一个列表
- 检查注册表项是否链接到(或副本)另一个注册表项
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 如何在 c++ 中比较 2 个链表并将匹配的数据放入另一个链表中
- 创建了一个链表,但如何删除 c++ 中的"所有"节点
- C++:如何做一个链表,结构作为参数传递?
- 程序的输出不是来的,它是一个链表程序
- C++创建一个链表,每个节点有超过 2 个字段
- 将 2 个链表中包含的相同值写入另一个链表
- 创建一个链表,每个节点指向另一个链表
- C++-将链表(A)插入另一个链表(B)的位置n
- 如何将一个链表插入另一个链表后面
- 为什么当我制作一个链表时,我的电脑会崩溃
- 如何在C++中创建一个链表向量
- 另一个链表中的链表
- c++制作一个链表的深层副本
- 按第一个值和第二个值将输入排序到一个链表中
- C++使用递归函数创建一个链表
- 我可以用花括号构造一个链表吗?
- (c++)读取CSV文件并使用信息创建对象(这将成为一个链表)