[英]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.