初始化vector <temp> myVector(10);

时间:2015-12-30 21:12:46

标签: c++ vector initialization

根据绝对c ++书籍:

vector<AClass> records(20); // vector consctructer uses the
                             // default constructor for AClass to initialize 20 elements.

temp.h

#ifndef TEMP_H
#define TEMP_H

class Temp {
public:
    Temp();
    static int b;
};
#endif /* TEMP_H */

temp.cpp

#include <iostream>
#include "temp.h"

using namespace std;

int Temp::b=9; // static value for control 

Temp::Temp(){
    cout<<"Initialize";
    ++b;
}

的main.cpp

#include <iostream>
#include <vector>
#include "temp.h"

using namespace std;

int main(int argc, char** argv) {

    vector<Temp> a(10); // 10 elements

    cout<<Temp::b;

    return 0;
}

我的结果是:    Initialize10;

正如你所看到的那样,只有一次构造函数被调用。为什么会这样?我很困惑。

1 个答案:

答案 0 :(得分:4)

{C} 03和C ++ 11(及更高版本)中vector构造函数的行为有所不同。

在C ++ 03中,它插入了10个默认构造的Temp对象的副本:默认构造函数被调用一次,复制构造函数(你没有仪器)被调用10次。

在C ++ 11中,它插入了10个默认构造的Temp对象。