簡體   English   中英

C++ 使用構造函數同時創建一個帶有數組的 object

[英]C++ Create an object with array simultaneously with the constructor

因此,我一直在探索如何使用我制作的自定義模板 class 創建動態數組。

#include <iostream>
#include <vector>

//HOW TO SET CLASS INTO DYNAMICAL ARRAY WITH VECTOR


//CREATE A CLASS
class User{
    std::string name;
public:
    User(){
    }
    User(std::string name){
        this->name = name;
    }
    void set_name(std::string name){
        this->name = name;
    }
    std::string get_name(){
        return name;
    }
};

int main(){
    //SET A NORMAL ARRAY THAT CAN CONTAIN AN OBJECT
    User user[1];

    //DO WHATEVER WITH THE USER[0] TO SET EVERYTHING THAT LATER WILL BE PUT IN VECTOR
    user[0].set_name("Meilianto");
    std::cout << "user[0]: " << user[0].get_name() << std::endl;

    //CREATE A DYNAMICAL ARRAY WHICH IS VECTOR
    std::vector<User> vuser;

    //PUSHBACK TO THE VECTOR AS "FIRST ELEMENT" BY PUTTING "USER[0]" AS AN ARGUMENT
    vuser.push_back(user[0]);
    std::cout << "vuser[0]: " << vuser[0].get_name() << std::endl;

    //YOU CAN "MODIFIED" THE "USER[0]" AND ADD AGAIN AS THE "SECOND ELEMENT" OF VECTOR
    user[0].set_name("Meilianto1");
    vuser.push_back(user[0]);
    std::cout << "vuser[1]: " << vuser[1].get_name() << std::endl;

    //YOU CAN EVEN "MODIFIED" THE "FIRST ELEMENT" BY CALLING THE "METHOD" OF IT
    vuser[0].set_name("Hantu");
    std::cout << "vuser[0]: " << vuser[0].get_name() << std::endl;

    //THE QUESTION HERE, CAN I DECLARE ARRAY TOGETHER WITH THE CONSTRUCTOR?
    User user1[1]("Bebek");
    
    //AND AFTER THAT I CAN ADD THAT OBJECT STRAIGHT AWAY TO VECTOR WITHOUT ASSIGNING ALL THE 
    //MEMBERS ONE BY ONE

    return 0;
}

如果您在我的代碼中閱讀了我的評論,我想要做的是,如果我在創建 object 時立即構建而不是一一分配所有成員,這可能會更快,這將花費更多代碼。 我想如果將來會有一個object,成員很多,需要一一分配。 它不會有效率。

編輯:我將用戶用戶 [0] 編輯為用戶用戶 [1],謝謝

如果您使用的是現代標准 C++,那么您可以這樣做

std::vector<User> vuser {
 {"Meilianto1"}, 
 {"Hantu"},
 {"Bebek"}
};

其中每對帶有字符串的內括號調用User構造函數,而外括號對使用一系列User調用std::vector<User>構造函數

這里的問題是,我可以和構造函數一起聲明數組嗎?

 User user1[1]("Bebek");

您可以為此使用 列表初始化,對於 arrays 以及向量:

User users[] { std::string("Herbert"), std::string("Anton") };
std::vector<User> vusers { std::string("Herbert"), std::string("Anton") };

我可以將 OBJECT 直接添加到向量,而不需要一個一個地分配所有成員嗎

您可以使用先前定義的數組的元素初始化向量,如下所示:

std::vector<User> v2users(std::cbegin(users), std::cend(users));

順便說一句:注意User user[0]; 在您的代碼中定義了一個沒有元素的數組,即大小為 0,這很少有意義。 訪問user[0]會導致未定義的行為

的,你可以!

User users[]{ User{ "one" }, User{ "two" } };

// Construct vector from iterator-pair:
std::vector<User> users_vector{ std::cbegin(users), std::cend(users) }; 

您可以使用emplace_back方法或push_back和臨時 object 來添加向量。 例如;

vuser.emplace_back("Meilianto1"); // 1 
vuser.push_back(User{"Meilianto1"}); // 2

第一個將 arguments 傳遞給構造函數。 第二個將變量移動到向量。 老實說,會有復制省略,這就是為什么沒有移動或復制的原因。 只是它會構造變量。

暫無
暫無

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

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