精华内容
下载资源
问答
  • C++ 初始化列表

    万次阅读 2020-07-18 19:16:24
    //初始化列表 class Person{ public: //传统初始化操作 Person(int a, int b, int c) { m_A = a; m_B = b; m_C = c; } int m_A; int m_B; int m_C; }; void test01() { Person p(10,20, 30).
    #include <iostream>
    using namespace std;
    #include <string>
    
    
    
    //初始化列表
    class Person{
    public:
    	//传统初始化操作
    	Person(int a, int b, int c) {
    		m_A = a;
    		m_B = b;
    		m_C = c;
    	}
    	
    
    	int m_A;
    	int m_B;
    	int m_C;
    };
    
    void test01() {
    	Person p(10,20, 30);
    
    	
    	cout << "m_A=" << p.m_A << endl;
    	cout << "m_B=" << p.m_B << endl;
    	cout << "m_C=" << p.m_C << endl;
    }
    
    int main() {
    
    	test01();
    	system("pause");
    
    }
    #include <iostream>
    using namespace std;
    #include <string>
    
    
    
    //初始化列表
    class Person{
    public:
    	//传统初始化操作
    	/*Person(int a, int b, int c) {
    		m_A = a;
    		m_B = b;
    		m_C = c;
    	}
    	*/
    
    	//初始化列表初始化属性
    	Person(): m_A(10),m_B(20),m_C(30){}
    
    
    	int m_A;
    	int m_B;
    	int m_C;
    };
    
    void test01() {
    //	Person p(10,20, 30);
    
    	Person p;
    	cout << "m_A=" << p.m_A << endl;
    	cout << "m_B=" << p.m_B << endl;
    	cout << "m_C=" << p.m_C << endl;
    }
    
    int main() {
    
    	test01();
    	system("pause");
    
    }

    上面两种方式都正常的输出:

    不过我们发现第二种的初始化列表写死了,不够灵活,我们怎么才能灵活的赋值

    #include <iostream>
    using namespace std;
    #include <string>
    
    
    
    //初始化列表
    class Person{
    public:
    	//传统初始化操作
    	/*Person(int a, int b, int c) {
    		m_A = a;
    		m_B = b;
    		m_C = c;
    	}
    	*/
    
    	//初始化列表初始化属性
    	Person(int a, int b, int c): m_A(a),m_B(b),m_C(c){}
    
    
    	int m_A;
    	int m_B;
    	int m_C;
    };
    
    void test01() {
    //	Person p(10,20, 30);
    
    	Person p(30,50,60);
    	cout << "m_A=" << p.m_A << endl;
    	cout << "m_B=" << p.m_B << endl;
    	cout << "m_C=" << p.m_C << endl;
    }
    
    int main() {
    
    	test01();
    	system("pause");
    
    }

    这个初始化值就比较灵活了

     

    展开全文
  • 初始化列表

    2018-08-12 21:11:50
    1. 什么是初始化列表? 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。 2. 为什么使用初始化列表 初始化类...

    初始化列表

    1. 什么是初始化列表?

    与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。

    2. 为什么使用初始化列表

    初始化类的成员有两种方式,一是使用初始化列表,二是在构造函数体内进行赋值操作。使用初始化列表主要是基于性能问题,对于内置类型,如int, float等,使用初始化类表和在构造函数体内初始化差别不是很大,但是对于类类型来说,最好使用初始化列表 。因为,使用初始化列表少了一次调用默认构造函数的过程,这对于数据密集型的类来说,是非常高效的。

    3. 哪些内容必须放到初始化列表

    • 常量成员(包括const修饰的变量),因为常量只能初始化不能赋值,所以必须放在初始化列表里面
    • 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面
    • 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。

    4. 成员变量的初始化顺序

    成员是按照他们在类中出现的顺序进行初始化的,而不是按照他们在初始化列表出现的顺序初始化的

    展开全文
  • Python初始化列表

    万次阅读 2019-04-29 18:17:49
    Python初始化列表 下面我们就来介绍在Python中初始化列表(我们创建大小为1000并使用零初始化的列表)的一些方法。 1)方法一:使用for循环和append()函数 arr = [] for i in range(1000): arr.append(0) 2)方法...

    Python初始化列表

    下面我们就来介绍在Python中初始化列表(我们创建大小为1000并使用零初始化的列表)的一些方法。

    1)方法一:使用for循环和append()函数

    arr = []
    for i in range(1000):
        arr.append(0)
    

    2)方法二:使用带计数器变量的while循环和append()

    arr = []
    i = 0
    while(i<1000):
        arr.append(0)
    

    3)方法三:使用列表推导(List Comprehension)

    列表推导(List Comprehension) 是一种数学家用来实现众所周知标记集合的Python方式。它由方括号组成,包含一个表达式,后跟一个for子句,后面跟一个可选的if子句。

    表达式可以是我们想要放入列表中的任何类型的对象;由于我们用零初始化列表,因此我们的表达式将只为0。

    arr = [0 for i in range(1000)]
    

    4)方法四:使用*运算符

    运算符可以用作[object] * n,其中n是数组中元素的数目。

    arr = [0]*1000
    

    代码执行时间比较

    下面我们来看看这四种方法的执行时间,看看那种方法更快。

    示例:我们将计算每种方法在500次上初始化10000个元素的数组所花费的平均时间。

    # 导入时间模块以计算时间
    import time 
    
    # 初始化列表以保存时间
    forLoopTime = [] 
    whileLoopTime = [] 
    listComprehensionTime = [] 
    starOperatorTime = [] 
    
    # 重复此过程500次,并计算所用的平均时间。
    for k in range(500):  
    
        # 开始时间
        start = time.time() 
        # 声明空列表
        a = [] 
        # 执行for循环10000次
        for i in range(10000): 
            a.append(0) 
        # 停止时间
        stop = time.time() 
        forLoopTime.append(stop-start) 
        
        # 开始时间
        start = time.time() 
        # 声明空列表
        a = [] 
        i = 0
        # 执行while循环10000次
        while(i<10000): 
            a.append(0) 
            i+= 1
        stop = time.time() 
        whileLoopTime.append(stop-start) 
    
        # 开始时间
        start = time.time() 
        # 使用列表推导(List Comprehension) 来初始化列表
        a = [0 for i in range(10000)]  
        stop = time.time() 
        listComprehensionTime.append(stop-start) 
       
    	# 开始时间
        start = time.time() 
        # 使用*运算符
        a = [0]*10000 
        stop = time.time() 
        starOperatorTime.append(stop-start) 
    
    print("for循环所用的平均时间:" + str(sum(forLoopTime)/100)) 
    
    print("while循环所用的平均时间:" + str(sum(whileLoopTime)/100)) 
    
    print("列表推导所用的平均时间:" + str(sum(listComprehensionTime)/100)) 
    
    print("* 运算符所用的平均时间: " + str(sum(starOperatorTime)/100))
    

    输出结果

    for循环所用的平均时间:0.008704814910888672
    while循环所用的平均时间:0.0133302903175354
    列表推导所用的平均时间:0.003199863433837891
    * 运算符所用的平均时间: 0.00023694276809692382
    

    注意:时间将根据执行此代码的平台而有所不同。这些时间仅用于研究这些初始化方法的相对性能。

    ● 可以看出,for和while循环所用时间几乎相同。

    ● 列表推导的性能比for和while循环要好得多,前者的速度要快3-5倍。当我们尝试创建1-1000的数字列表时,可以看到另一个这种差异的例子。使用列表推导比使用append()要好得多。

    `a = [i ``for` `i in range1,1001]`
    

    ● 使用*运算符比其余方法更快,这是您应该初始化列表的方式

    展开全文
  • 初始化列表初始化顺序

    千次阅读 2018-07-23 09:15:01
    初始化列表是按类中声明变量的先后顺序来初始化,与初始化列表的顺序无关。   class Printer{ public: Printer(std::string name) {std::cout &lt;&lt; name;} }; class Container{ public: ...

    输出结果为ab

    初始化列表是按类中声明变量的先后顺序来初始化,与初始化列表的顺序无关。

     

    class Printer{
        public:
            Printer(std::string name) {std::cout << name;}
    };
    class Container{
        public:
            Container() : b("b"), a("a") {}
        Printer a;
        Printer b;
    };
    int main(){
        Container c;
        return 0;
    }

     

    展开全文
  • c++中的初始化列表详解

    万次阅读 多人点赞 2018-05-18 18:15:04
    与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。 class foo { public: foo(string s, int i):name(s), id(i){} ; //...
  • 详解初始化列表

    2017-08-08 13:01:04
    初始化列表定义构造函数有个特殊的初始化方式叫“初始化表达式表”(简称初始化列表)。初始化列表位于函数参数表之后,却在函数体 {} 之前。这说明该表里的初始化工作发生在函数体内的任何代码被执行之前。Date(int...
  • c++成员变量初始化方法:声明时初始化、初始化列表、构造函数初始化 有人说在声明的时候初始化相当于在构造函数中初始化,其实不是的,成员变量初始化的顺序为:先进行声明时初始化,然后进行初始化列表初始化,最后...
  • 成员初始化列表: 在类构造函数中,不在函数体内对变量赋值,而在参数列表后,跟一个冒号和初始化列表。 初始化和赋值对内置类型的成员没有什么大的区别,像上面的人一个构造函数都可以。对非内置类型成员变量,...
  • 初始化列表的顺序应该是按照你成员声明顺序初始化。
  • C++构造函数初始化列表

    万次阅读 2018-02-07 19:52:47
    何为构造函数初始化列表 class Sample { public: // 构造函数内部赋值 Sample(int a) { a_ = a; } // 构造函数初始化列表 Sample(int a) : a_(a) { } private: int a_; }; 上面的代码中,Sample类的2...
  • 初始化列表中初始化数组

    千次阅读 2019-03-23 14:28:54
    学习了一下前缀树。 需要用到一个结构体保存两个指针,如下 struct Node ...能不能将初始化操作放在初始化列表中呢,如下 以上两种写法都有问题,突然想到,数组应该用大括号初始化啊 就酱。 ...
  • 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如: class CExample { public: int a; float b; //构造函数初始化列表 CExample(): a(0),b...
  • 成员初始化列表

    千次阅读 2017-03-18 17:44:29
    2、成员初始经列表由逗号分隔的初始化列表组成(前面带冒号)。它位于参数列表的右括号之后、函数体左括号之前。 3、初值可以是常量或构造函数的参数列表中的参数。这种方法并不限于初始化常量。 例如下代码: Queue:...
  • 类构造函数的初始化列表,举例 一个对象的构造分两部分,首先是分配空间,然后初始化。 只要有对象生成,不管是以什么形式生成,都会调用构造函数进行初始化。 然后下面有个例子,在蓝色区域Big类的复制构造函数中,...
  • C++中为什么建议使用初始化列表

    千次阅读 2018-07-05 21:59:56
    什么是初始化列表,来看下面代码,我们有一个日期类对象 我们可以这样来定义构造函数: class Date ...
  • C++:只用初始化列表初始化变量的几种情况标签: C++ static const 初始化列表by 小威威这篇文章主要阐述在C++中只能用初始化列表初始化变量的几种情况。在这之前,我们要区分好初始化和赋值。初始化是在定义变量的...
  • 成员函数初始化列表

    千次阅读 2020-05-20 20:00:43
    除了必须用初始化列表的场合,我们用初始化列表还有什么其他目的? 有,就是提高程序运行效率。 对于类类型成员变量xobj放到初始化列表中能够比较明显的看到效率的提升 但是如果是个简单类型的成员变量 比如 int m_...
  • C++初始化列表

    2016-04-17 00:10:35
    问已经有了第一种初始化方式为什么还要使用初始化列表 哪些东西必须放在初始化列表中构造函数的执行阶段:1. 初始化阶段:所有类类型的成员都会在初始化阶段初始化,即使该成员没有出现在构造函数的初始化列表中2. ...
  • C++ 初始化列表给数组初始化

    千次阅读 2020-03-27 21:32:37
    一般的初始化是使用小括号()。 给数组初始化是使用大括号{}。 class base{ char a[10]; public: base():a{{}}{} } 上例的初始化就相当于:a[10] = {};。
  • 构造函数初始化时必须采用初始化列表一共有三种情况, 1. 没有默认构造函数的类成员对象() 2. (常量成员)需要初始化const修饰的类成员 3. (引用)需要初始化引用成员数据class A { ... private: int a; }; ...
  • 参数初始化列表

    千次阅读 2015-09-10 13:11:24
    对于内置类型,如int, float等,使用初始化类表和在构造函数体内初始化差别不是很大,但是对于类类型来说,最好使用初始化列表,为什么呢?由下面的测试可知,使用初始化列表少了一次调用默认构造函数的过程,这对于...
  • c++初始化列表

    千次阅读 2017-12-21 10:28:51
    c++构造函数中使用初始化列表初始化成员变量时要注意成员变量的初始化是按照声明的顺序初始化的。/* 编者:heavenmint@foxmail.com 功能:c++ 列表初始化用法演示 环境:Win10 Professional 1703 / Microsoft ...
  • C++成员初始化列表

    千次阅读 2018-12-16 14:20:38
    C++类成员初始化列表C++类型定义C++构造函数的初始化列表定义C++构造函数执行的两个阶段为什么使用初始化列表C++里面哪些东西必须放在初始化列表里面成员变量的初始化顺序 这边文章主要学习C++里面的成员初始化列表...
  • 使用初始化列表有两个原因: 原因1.必须这样做:《C++ Primer》中提到在以下三种情况下需要使用初始化成员列表: 情况一、需要初始化的数据成员是对象的情况(这里包含了继承情况下,通过显示调用父类的构造函数对...
  • dart初始化列表

    千次阅读 2018-09-10 13:05:08
    初始化列表 除了调用父类构造函数,你也可以在构造函数体运行之前初始化实例变量。用逗号隔开使其分别初始化。 class Point { num x; num y; Point(this.x, this.y); // 初始化列表在构造函数运...
  • 初始化列表的初始化顺序

    千次阅读 2009-10-17 13:29:00
    构造函数初始化列表仅用于初始化成员的值,并不指定这些初始化执行的次序。成员被初始化的次序就是定义成员的次序。第一个被定义的成员先被初始化,依次类推。一般,初始化的顺序无关紧要,然而,如果一个成员是根据...
  • 使用初始化列表有两个原因: 原因1.必须这样做: 《C++ Primer》中提到在以下三种情况下需要使用初始化成员列表:  情况一、需要初始化的数据成员是对象的情况(这里包含了继承情况下,通过显示调用父类的构造...
  • 初始化列表开辟空间与初始化是同时完成的,直接给予一个值。 2. C++中常量是不能被赋值的,只能被初始化,所以const类型必须在初始化列表中完成; 3. 引用必须在定义的时候初始化,并且不能赋新值,所以引用类型也...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 844,801
精华内容 337,920
关键字:

初始化列表是什么