簡體   English   中英

在C ++中相同類型的向量中使用類的構造函數

[英]Using a class' constructor within a vector of the same type in C++

考慮:

MyClass {
    //constructor
    MyClass()
    {}
.
.
.
};

然后,定義相同類型的向量

int main()
{
.
.
    vector<MyClass>myVector(12);
.
.

可以嗎?

for(int i = 0; i < myVector.size(); i++)
{
    //an attempt to fill my vector with initialized MyClass objects.
    myVector[i] = MyClass(); //Calling constructor
}

或:(在未定義向量大小的情況下)

for(int i = 0; i < whatever; i++)
{
    //an attempt to fill my vector with initialized MyClass objects.
    myVector.push_back(MyClass()); //Calling constructor
}

如果不允許這樣做,初始化類實例並將其存儲在向量中而不使用指針的替代方法是什么? 有這樣的事嗎?

您寫的所有內容都是可以接受的。

vector<MyClass>myVector(12);

將調用MyClass默認構造函數12次。 所以這相當於

vector<MyClass>myVector;
for(int i = 0; i < 12; i++)
{
    myVector.push_back(MyClass());
}

您提供的另一個變體略有不同

for(int i = 0; i < myVector.size(); i++)
{
    myVector[i] = MyClass();
}

在這里,向量的每個元素都已經以某種方式初始化。 因此,當您執行此操作時,將刪除MyClass先前實例(將調用析構函數),並將元素分配給新實例。

如果需要將默認構造函數設為私有並使用一些值初始化類,則必須使用下一個方法:

vector<MyClass>myVector(12, MyClass(some_value));

或如你所見

vector<MyClass>myVector;
for(int i = 0; i < 12; i++)
{
    myVector.push_back(MyClass(some_value));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM