0.参考
菜鸟教程-数据结构
https://blog.csdn.net/weixin_43914889/article/details/107869575
1.结构体创建与访问
参考如下代码,包含了结构体类型的创建、声明、赋值、函数传参的方法,与 C 大同小异。
#include <iostream>
#include <string.h>
using namespace std;
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
void printNode2(struct ListNode node)
{
cout << "val2 : " << node.val <<endl;
}
int main( )
{
struct ListNode n2 = {2};
n2.val = 22;
printNode2(n2);
return 0;
}
2.结构体指针
定义指向结构的指针
ListNode *n1;
在上述定义的指针变量中存储结构变量的地址
n1 = new ListNode(1);
使用指向该结构的指针访问结构的成员
n1->val = 11;
于是,我们便可以对上述代码进行优化,将传递结构体对象改为传递结构体指针,从而减少内存空间的占用
#include <iostream>
#include <string.h>
using namespace std;
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
void printNode1(struct ListNode *node)
{
cout << "val1 : " << node->val <<endl;
}
int main( )
{
struct ListNode *n1 = new ListNode(1);
struct ListNode n2 = {2};
n1->next = &n2;
n1->val = 11;
n2.val = 22;
printNode1(n1);
printNode1(n1->next);
return 0;
}
3.typedef 关键字
下面是一种更简单的定义结构的方式,您可以为创建的类型取一个"别名"。例如:
typedef struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
}ListNode ;
现在,您可以直接使用 Books 来定义 Books 类型的变量,而不需要使用 struct 关键字。下面是实例:
ListNode n1, n2;
您可以使用 typedef 关键字来定义非结构类型,如下所示:
typedef long int *pint32;
pint32 x, y, z;
x, y 和 z 都是指向长整型 long int 的指针。
4.初始化
4.1 通过冒号初始化
形如:
结构体名(传入参数): 成员变量1(参数1),成员变量2(参数2){};
这是一个链表的节点:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
实例化方法如下:
ListNode *n1 = new ListNode(4);
ListNode *n2 = new ListNode(5);
ListNode *n3 = new ListNode(1);
n1->next = n2;
n2->next = n3;
4.2 直接初始化
直接在初始化时在{}中传入对应参数值即可
ListNode n4 = {2, NULL};
4.3 构造函数初始化
在上一章的学习中,我们学会了类的构造函数初始化方法,结构体构造函数初始化方法与其类似。
typedef struct Entry{
int _key;
int _value;
Entry(int key,int value){
this->_key = key;
this->_value = value;
}
};
int main(){
Entry b(2,3);
cout<< b._key << b._value <<endl;
return 0;
}
|