精华内容
下载资源
问答
  • C++ 结构体初始化与赋值

    万次阅读 多人点赞 2016-05-30 13:28:57
    1.CC++结构体的初始化今天看到项目中对自定义结构体初始化方式有点陌生,特在此罗列一下可用的结构体初始化的方式。对结构体struct A { int b; int c; }有几种初始化方式:第一种:struct A a = { .b = 1, ...

    在这里插入图片描述

    1.结构体初始化

    结构体是常用的自定义构造类型,是一种很常见的数据打包方法。结构体对象的初始化有多种方式,分为顺序初始化、指定初始化、构造函数初始化。假如有如下结构体。

    struct A {
    	int b;
    	int c;
    };
    

    (1)顺序初始化因为书写起来较为简约,是我们最常用的初始化方式,但相对于指定初始化,无法变更数据成员初始化顺序,灵活性较差,而且表现形式不直观,不能一眼看出 struct 各个数据成员的值。

    A a = {1, 2};
    

    (2)指定初始化(Designated Initializer)实现上有两种方式,一种是通过点号加赋值符号实现,即“.fieldname=value”,另外一种是通过冒号实现,即“fieldname:value”,其中 fieldname 为结构体成员名称 。前者是 C99 标准引入的初始化方式,后者是 GCC 的扩展。遗憾的是有些编译器并不支持指定初始化,比如 Visual C++。

    // 点号+赋值符号
    A a = {.b = 1, .c = 2};
    
    //冒号
    A a = {b:1, c:2};
    

    Linux 内核喜欢用 .fieldname=value 的方式进行初始化,使用指定初始化,一个明显的优点是成员初始化顺序和个数可变,并且扩展性好,比如在结构体非末尾处增加字段时,避免了传统顺序初始化带来的大量修改。

    (3)构造函数初始化常见于 C++ 代码中,因为 C++ 中的 struct 可以看作 class,结构体也可以拥有构造函数,所以我们可以通过结构体的构造函数来初始化结构体对象。给定带有构造函数的结构体:

    struct A {
    	A(int b,int c) {
    		this->b=b;
    		this->c=c;
    	};
    	int b;
    	int c;
    }
    

    那么结构体对象的初始化可以像类对象初始化那样:

    A a(1,2);
    

    注意: struct 如果定义了构造函数的话,就不能用大括号进行初始化了,即不能再使用指定初始化与顺序初始化了。

    2.结构体赋值

    变量的赋值和初始化是不一样的,初始化是在变量定义的时候完成的,是属于变量定义的一部分,赋值是在变量定义完成之后想改变变量值的时候所采取的操作。还是给定结构体 A:

    struct A {
    	int b;
    	int c;
    };
    

    注意: 结构体变量的赋值是不能采用大括号的方式进行赋值的,例如下面的赋值是不允许的。

    A a;
    a={1,2};	// 错误赋值
    

    下面列出常见结构体变量赋值的方法。

    (1)使用 memset 对结构体变量进行置空操作:

    // 按照编译器默认的方式进行初始化(如果 a 是全局静态存储区的变量,默认初始化为0,如果是栈上的局部变量,默认初始化为随机值)
    A a; 
    memset(&a,0,sizeof(a));
    

    (2)依次给每一个结构体成员变量进行赋值:

    A a; 
    a.b=1;
    a.c=2;
    

    (3)使用已有的结构体变量给另一个结构体变量赋值。也就是说结构体变量之间是可以相互赋值的。

    A a = {1,2};
    struct A a1;
    a1=a; 				// 将已有的结构体变量赋给a1
    

    初始化与赋值有着本质的区别,初始化是变量定义时的第一次赋值,赋值则是定义之后的值的变更操作,概念上不同,所以实现上也不一样。


    参考文献

    2016腾讯春季校园实习招聘技术岗初试(一面)问题汇总(CC++后台)
    结构体初始化
    C结构体-designated initializer
    C语言结构体声明中冒号的使用(占位符) & C结构体的乱序初始化

    展开全文
  • 常见的参数初始化方法

    千次阅读 2019-08-08 10:42:56
    我们常见的几种初始化方法是按照“正态分布随机初始化——对应为normal”和按照“均匀分布随机初始化——对应为uniform”,这里就不再多说了,这里介绍几种遇见较少的初始化方法。 1、Glorot初始化方法 (1)正态...

    常见的参数初始化方法


           我们常见的几种初始化方法是按照“正态分布随机初始化——对应为normal”和按照“均匀分布随机初始化——对应为uniform”,这里就不再多说了,这里介绍几种遇见较少的初始化方法。

    1、Glorot初始化方法

    (1)正态化的Glorot初始化——glorot_normal

    Glorot 正态分布初始化器,也称为 Xavier 正态分布初始化器。它从以 0 为中心,标准差为 stddev = sqrt(2 / (fan_in + fan_out)) 的截断正态分布中抽取样本, 其中 fan_in 是权值张量中的输入单位的数量, fan_out 是权值张量中的输出单位的数量。在keras和tensorflow均有实现,以keras为例:

    keras.initializers.glorot_normal(seed=None)
    (2)标准化的Glorot初始化——glorot_uniform

    Glorot 均匀分布初始化器,也称为 Xavier 均匀分布初始化器。

    它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limit 是 sqrt(6 / (fan_in + fan_out)), fan_in 是权值张量中的输入单位的数量, fan_out 是权值张量中的输出单位的数量。以keras为例:

    keras.initializers.glorot_uniform(seed=None)
    (3)Glorot初始化器的缺点

    因为Xavier的推导过程是基于几个假设的,

    其中一个是激活函数是线性的,这并不适用于ReLU,sigmoid等非线性激活函数;

    另一个是激活值关于0对称,这个不适用于sigmoid函数和ReLU函数它们不是关于0对称的。

    2、Kaiming初始化

    Kaiming初始化,也称之为he初始化,也称之为msra初始化,出自大神 何凯明只手。即

    Kaiming initializer=he initializer=msra initializer

    因为前面讲了Glorot初始化不适合relu激活函数,所以残差网络的作者何凯明在这篇论文中提出了ReLU网络的初始化方法:Kaming初始化。作者的推导过程针对的其实是卷积网络的前向和反向过程。而为了和Xavier初始化方法保持一致,这里我们还是讨论全连接网络结构。 关于期望、方差的性质,我们已经在Xavier初始化一节介绍过了,这里不再重复。

    在Xavier论文中,作者给出的Glorot条件是:正向传播时,激活值的方差保持不变;反向传播时,关于状态值的梯度的方差保持不变。这在本文中稍作变换:正向传播时,状态值的方差保持不变;反向传播时,关于激活值的梯度的方差保持不变。 

    (1)正态化的kaiming初始化——he_normal

    He 正态分布初始化器。

    它从以 0 为中心,标准差为 stddev = sqrt(2 / fan_in) 的截断正态分布中抽取样本, 其中 fan_in是权值张量中的输入单位的数量,在keras中的实现为

    keras.initializers.he_normal(seed=None)
    (2)标准化化的kaiming初始化——he_uniform

    He 均匀方差缩放初始化器。

    它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limit 是 sqrt(6 / fan_in), 其中 fan_in 是权值张量中的输入单位的数量。

    keras.initializers.he_uniform(seed=None)
    3、lecun初始化

    出自大神Lecun之手。

    (1)标准化化的kaiming初始化——lecun_uniform

    LeCun 均匀初始化器。

    它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limit 是 sqrt(3 / fan_in), fan_in 是权值张量中的输入单位的数量。

    keras.initializers.lecun_uniform(seed=None)
    (2)正态化的kaiming初始化——lecun_normal

    LeCun 正态分布初始化器。

    它从以 0 为中心,标准差为 stddev = sqrt(1 / fan_in) 的截断正态分布中抽取样本, 其中 fan_in是权值张量中的输入单位的数量。

    keras.initializers.lecun_normal(seed=None)
    4、Batch Normalization
    BN是将输入的数据分布变成高斯分布,这样可以保证每一层神经网络的输入保持相同分布。

    优点 
    随着网络层数的增加,分布逐渐发生偏移,之所以收敛慢,是因为整体分布往非线性函数取值区间的上下限靠近。这会导致反向传播时梯度消失。BN就是通过规范化的手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值0方差1的标准正态分布,使得激活输入值落入非线性函数中比较敏感的区域。可以让梯度变大,学习收敛速度快,能大大加快收敛速度。

    Scale and Shift作用 
    γ和βγ和β是学习到的参数,他们可以让标准正态分布变得更高/更胖和向左右偏移。 

    展开全文
  • a:动态初始化 只指定长度,由系统给出初始化值 格式: * 数据类型[] 数组名 = new 数据类型[数组长度]; * int[] arr = new int[5]; b:静态初始化的格式: * 格式:数据类型[] 数组名 = new 数据类型[]{...

    数组是存储同一种数据类型多个元素的集合。
    a:动态初始化 只指定长度,由系统给出初始化值
    格式:
    * 数据类型[] 数组名 = new 数据类型[数组长度];
    * int[] arr = new int[5];
    b:静态初始化的格式:
    * 格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
    * 简化格式:
    * 数据类型[] 数组名 = {元素1,元素2,…};
    int[] b = new int[]{1,2,3};
    int[] b = {1,2,3};
    错误格式:
    1.动静结合
    int[] a = new int[3]{1,2,3};
    2.未指定长度也未赋值
    int[] b =nw int[];

    展开全文
  • TensorFlow-Keras 3.常见参数初始化方法

    千次阅读 2020-09-28 16:12:43
    上篇文章自定义 metrics 用到了 add_weights 方法,这个方法会初始化一个变量,维度不定。下面就常见初始化方法,进行介绍。

    上篇文章自定义 metrics 用到了 add_weights 方法,这个方法会初始化一个变量,维度不定。参数初始化的选择,对后续的模型迭代效果与收敛速度都有一定影响。下面看下 Keras 有哪些常见的初始化方法:

    Tips:

    自定义 metrics 用到的 add_weight 并调用 initializer 初始化函数:

    class CategoricalTruePositives(keras.metrics.Metric):
        def __init__(self, name="categorical_true_positives", **kwargs):
            super(CategoricalTruePositives, self).__init__(name=name, **kwargs)
            self.true_positives = self.add_weight(name="ctp", initializer="zeros")
            # 也可以调整shape一次计算多个指标
            self.b = self.add_weight(name="b",initializer="random_uniform")

    常见的 keras 参数初始化方法:

    常见初始化方法
    初始化方法参数
    正态化的Glorot初始化glorot_normal
    标准化的Glorot初始化glorot_uniform
    正态化的he初始化he_normal
    标准化的he初始化he_uniform
    正态化的lecun初始化lecun_normal
    标准化的lecun初始化lecun_uniform
    截断正态分布 truncated_normal
    标准正态分布random_normal
    均匀分布 random_uniform

     

    一.常见初始化函数与分布图

    首先编写一个简单模型,并初始化其参数,然后 get_weights 并 plot 查看初始化参数的分布,这里接受 initial 参数并传给参数初始化,可以把上述常见初始化方法直接传入函数即可。这里 Dense 层 kernel 参数共有 50000 x 100 = 5000000 个:

        def getDenseWeights(initial):
            inputs = layers.Input(shape=(100,), name='input')
            d1 = layers.Dense(50000, activation='sigmoid', name='dense1',kernel_initializer=initial)(inputs)
            output = layers.Dense(7, activation='sigmoid', name='output')(d1)
            model = keras.Model(inputs=inputs, outputs=output)
            # 100 x 500
            w_dense1 = np.array(model.get_layer('dense1').get_weights()[0]).reshape(-1) # 获取dense1层的参数
            n, bins, patches = plt.hist(w_dense1,bins=1000)
            plt.title(initial)
            plt.xlabel('data range')
            plt.ylabel('probability')
            plt.show()

    直接输入上述初始化方法名称即可: 

        getDenseWeights("glorot_normal")

     

    1.正态化的Glorot初始化——glorot_normal

    keras.initializers.glorot_normal(seed=None)
    

    Glorot 正态分布初始化器,也称为 Xavier 正态分布初始化器。

    它从以 0 为中心,标准差为 stddev = sqrt(2 / (fan_in + fan_out)) 的截断正态分布中抽取样本, 其中 fan_in 是权

    值张量中的输入单位的数量, fan_out 是权值张量中的输出单位的数量。

     

    2. 标准化的Glorot初始化——glorot_uniform

    keras.initializers.glorot_uniform(seed=None)
    

    Glorot 均匀分布初始化器,也称为 Xavier 均匀分布初始化器。

    它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limit 是 sqrt(6 / (fan_in + fan_out)), fan_in 是权值张量中的

    输入单位的数量, fan_out 是权值张量中的输出单位的数量。

     

    3.正态化的he初始化——he_normal 

    keras.initializers.he_normal(seed=None)
    

    He 正态分布初始化器。

    它从以 0 为中心,标准差为 stddev = sqrt(2 / fan_in) 的截断正态分布中抽取样本, 其中 fan_in 是权值张量中的输入

    单位的数量。

     

    4.标准化化的he初始化——he_uniform

    keras.initializers.he_uniform(seed=None)
    

    He 均匀方差缩放初始化器。

    它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limit 是 sqrt(6 / fan_in), 其中 fan_in 是权值张量中的输入单位的

    数量。

     

     

    5.正态化的lecun初始化——lecun_normal

    keras.initializers.lecun_normal(seed=None)
    

    LeCun 正态分布初始化器。

    它从以 0 为中心,标准差为 stddev = sqrt(1 / fan_in) 的截断正态分布中抽取样本, 其中 fan_in 是权值张量中的输入

    单位的数量。

     

     

    6.标准化的lecun初始化——lecun_uniform

    keras.initializers.lecun_uniform(seed=None)
    

    LeCun 均匀初始化器。

    它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limit 是 sqrt(3 / fan_in), fan_in 是权值张量中的输入单位的数

    量。

     

    7.截断正态分布 -- truncated_normal

    keras.initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None)
    

    这个初始化方法是 tensorflow 的默认初始化方法,按照截尾正态分布生成随机张量的初始化器。

    生成的随机值与 RandomNormal 生成的类似,但是在距离平均值两个标准差之外的随机值将被丢弃并重新生成。这是用来生成

    神经网络权重和滤波器的推荐初始化器。

    参数

    • mean: 一个 Python 标量或者一个标量张量。要生成的随机值的平均数。
    • stddev: 一个 Python 标量或者一个标量张量。要生成的随机值的标准差。
    • seed: 一个 Python 整数。用于设置随机数种子。

     

    8.标准正态分布——random_normal

    keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None)
    

    标准正太分布,这个都比较熟悉了。

    参数

    • mean: 一个 Python 标量或者一个标量张量。要生成的随机值的平均数。
    • stddev: 一个 Python 标量或者一个标量张量。要生成的随机值的标准差。
    • seed: 一个 Python 整数。用于设置随机数种子。

     

     

    9.均匀分布——random_uniform

    keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None)
    

    参数 

    • minval: 一个 Python 标量或者一个标量张量。要生成的随机值的范围下限。
    • maxval: 一个 Python 标量或者一个标量张量。要生成的随机值的范围下限。默认为浮点类型的 1。
    • seed: 一个 Python 整数。用于设置随机数种子。

     

     

    二.用initializers初始化参数

    上面展示的初始化方法都使用了默认的函数名传入,无法控制 mean, std, limit 等参数,如果想要输入非默认的参数,可以采用如下形式,以 mean = 5 ,std = 3 的标准正态分布为例: 

    init = keras.initializers.RandomNormal(mean=5, stddev=3, seed=None)
    
    def getDenseWeights(init):
        inputs = layers.Input(shape=(100,), name='input')
        d1 = layers.Dense(50000, activation='sigmoid', name='dense1',kernel_initializer=init)(inputs)
        output = layers.Dense(7, activation='sigmoid', name='output')(d1)
        model = keras.Model(inputs=inputs, outputs=output)

    参数换成对应的 initializers 

     

    三.自定义方式初始化参数

    除了使用Api给出的方法外,也可以调用其他方法,自定义参数。自定义参数需要遵循如下条件,如果传递一个自定义的可调用函数,那么它必须使用参数 shape(需要初始化的变量的尺寸)和 dtype(数据类型):

    1.Api方法

        def api_init(shape, dtype=None):
            return K.random_normal(shape, dtype=dtype)

    把 api_init 传给 getDenseWeights 即可。

     

    2.DIY

    有 50000 x 100 共 5000000 个参数,我比较任性,就想传 0 - 4999999 作为初始化参数怎么办:

        def my_init(shape,dtype=None):
            num = np.prod(shape)
            arr = np.array(range(0,num))
            return arr.reshape(shape)

    同理,传给 getDenseWeights :

        def getDenseWeights(initial):
            inputs = layers.Input(shape=(100,), name='input')
            d1 = layers.Dense(50000, activation='sigmoid', name='dense1',kernel_initializer=my_init)(inputs)
            output = layers.Dense(7, activation='sigmoid', name='output')(d1)
            model = keras.Model(inputs=inputs, outputs=output)
            # 100 x 500
            w_dense1 = np.array(model.get_layer('dense1').get_weights()[0]).reshape(-1) # 获取dense1层的参数
            plt.plot(np.array(range(0,5000000)),w_dense1)
            plt.title(initial)
            plt.savefig("hist/{}".format(initial))
            plt.show()
    
    
        getDenseWeights("my_init")

    这里就不画分布图了,只是演示一下怎么 diy ,如果想复用训练好的参数,在构建模型的时候,也可以调用 layer 的 set_weight 方法初始化参数,这里就不多赘述了。

     

    参数初始化还有很多生成方法与生成方式,这里并不代表全部,更多初始化方法可以查看参数初始化-keras中文文档

    展开全文
  • Hive初始化元数据常见报错

    千次阅读 2019-06-04 11:42:12
    目录 Hive元数据相关配置 一、hive的配置 二、mysql数据库配置 ... hive初始化元数据常见的报错 Hive元数据相关配置 一、hive的配置 下面是Hive元存储”的存储位置为MySQL数据库,必要...
  • 主要介绍了Go语言创建、初始化数组的常见方式,实例汇总了Go语言操作数组的常见技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 笔者抱着很纠结的心态写下了此文,仅以纪念我N刷系统的落寞。。。 本文基于RaspberryPi Model 3B,以Ubuntu-Mate(16.04.3)和Raspbian(2017-07-05-raspbian-...现将常见初始化配置流程整理如下,供广大网友参考。
  • UIImage可以通过以下两种方式进行初始化: //第一种初始化方式:【注意使用这种初始化的时候如果是png格式的可以不给后缀名,根据屏幕的的分辨率去匹配图片】 UIImage *image = [UIImage imageNamed:@v_red_heart_...
  • 直接初始化与拷贝(复制)初始化

    千次阅读 2016-01-19 20:57:45
    我们常见的几种初始化的形式: string str1 = "first";  //拷贝初始化 string str2(10,'a');  //直接初始化 string str3(str2);  //直接初始化 string str4 = string(10,'b');  //拷贝初
  • 1随机初始化 2Xavier初始化 3He初始化 4高斯随机初始化 withBatchNorm 5Pre-train Reference 1随机初始化 2Xavier初始化 每层的权重初始化公式如下: 上式为一个均匀分布,n_j为输入层的参数,n_(j+1)为...
  • 常见对象初始化创建的几种方法

    千次阅读 2018-06-26 16:40:47
    //集合初始化器和对象初始化器创建 List<UserInfo> UserList4 = new List { new UserInfo{ ID = 1, UserName = "张三", Password = "zhangsan" }, new UserInfo{ ID = 2, UserName = "李四", Password = "lisi...
  • 主要介绍了C#中结构(struct)的部分初始化和完全初始化,通过实例分析了结构初始化常见的错误及技巧,有助于加深对C#结构(struct)的认识,需要的朋友可以参考下
  • python3初始化List的常见用法

    千次阅读 2020-06-25 10:24:19
    在领扣的刷题过程中会经常遇到list需要一开始的时候进行初始化的需求,对list初始化有以下几个技巧: 一维列表: 初始化元素个数为8的的list列表 li = [i for i in range(8)] print(li) li = [1] * 10 print...
  • KIS标准财务基础资料、初始化数据结构及常见问题.pdf
  • 基于最新Spring 5.x,详细介绍了Spring MVC 初始化流程的源码,主要包括DispatcherServlet与MVC子容器的初始化,以及各种MVC组件的初始化
  • select '实例名称' 数据库选项,INSTANCE_NAME 数据库集群相关参数值 FROM v$instance union all select '数据库版本',substr(svr_version,instr(svr_version,'V')) FROM v$instance union all ...
  • 我们常见的几种初始化的形式: string str1 = "first"; //拷贝初始化,编译器允许把这句话改写为string str(“first”),但是string类必须有public的拷贝(移动)构造函数 string str2(10,'a'); //...
  • mysql初始化密码常见报错问题

    千次阅读 2019-04-18 10:53:23
    1,mysql5.6是密码为空直接进入数据库的,但是mysql5.7就需要初始密码 cat /var/log/mysqld.log | grep password 1 2,然后执行 mysql -uroot -p ,输入上面的到的密码进入,用该密码登录后,必须马上修改新的密码...
  • 指针初始化时,“=”的右操作数必须为内存中数据的地址,不能够是变量, int*p=0;除外,该语句表示指针为空。 在编译过程中,不能通过对没有初始化的指针的引用, 没有初始化的指针,简称野指针,可能会乱指,指向...
  • 这篇文章主要讲解如何初始化Direct3D。Direct3D初始化成功后,我们将的到一个代表显卡的C++对象(类型:IDrect3DDevice9)。初始化流程图:完整代码: //全局变量 IDirect3DDevice9 *device = 0 ; // Step 1: ...
  • 接口初始化和类初始化区别

    千次阅读 2017-11-09 20:59:10
    虚拟机规范严格规定了有且只有四种情况必须立即对类进行初始化: 1. 遇到new、getstatic、putstatic、invokestatic这四条字节码指令时, 如果类还没有进行过初始化,则需要先触发其初始化。 生成这四条指令最常见...
  • mysql初始化密码常见报错问题 1,mysql5.6是密码为空直接进入数据库的,但是mysql5.7就需要初始密码 cat /var/log/mysqld.log | grep password 2,然后执行 mysql -uroot -p ,输入上面的到的密码进入,用该...
  • iOS 几种初始化的分析比较

    千次阅读 2016-01-05 16:28:37
    整天都在初始化,好几种初始化方法,今天有时间了,就来总结一下iOS中的几种常见初始化方法。 1,下边这一种是最简单的初始化,不过一定要记着,在初始化的时候一定要先掉用父类的初始化。 - (instancetype)init {...
  • Pycharm小白安装与初始化常见问题

    千次阅读 2019-03-29 15:00:01
    公司使用Pycharm遇到的坑常见问题1.要求配置Java环境2.Python包报错3.连接git失败 常见问题 都是本人作为一个Windows小白+Pycharm小白在公司初次安装时遇到的问题,大佬级别可以不用往下看了。 安装包和一些基本配置...
  • 初始化与类对象初始化

    千次阅读 2015-08-13 23:26:43
    1.遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的java代码场景是:使用new关键字实例化对象的时候、读取或者设置一个类的...
  • Cisco思科交换机怎么初始化?交换机的类型很多,最常见的就是以太网交换机,但是交换机该怎么初始化呢?下面我们以Cisco思科交换机为例,分享交换机的初始化设置教程,需要的朋友可以参考下
  • 因为浏览器的兼容性,每个浏览器设计时都有自己的特性,因此在解析...本人常用的常见初始化如下:body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, p, blockquote, th, td {
  • 链表常见操作java实现一:链表初始化,求链表长度

    万次阅读 多人点赞 2016-08-08 20:24:27
    1.前言链表是一种非常基础也非常重要的数据结构,在实际中使用非常广泛,也是各种面试里特别容易出现的类型。...链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 562,179
精华内容 224,871
关键字:

常见初始化