所以,我一直在探索如何用我做的一個自定義模板類來創建一個動態陣列。
#include <iostream>
#include <vector>
//HOW TO SET CLASS INTO DYNAMICAL ARRAY WITH VECTOR
//CREATE A CLASS[/span
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[1]。
//DO whatever with the USER[0] to set everything that later will be put in VECTOR.
user[0].set_name("Meilianto"/span>)。
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" 的第二元素。
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 call 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?
用戶user1[1]("Bebek")。
//在這之后,我可以直接將該物件添加到VECTOR中,而無需分配所有的。
//MEMBERS逐一。
return 0。
}
如果你看了我的代碼中的評論,我想做的是,如果我在創建物件時就立即構建,而不是一個一個地分配所有的成員,這樣會花費更多的代碼,也許會更快。我想如果將來有一個物件有很多成員,需要一個一個地分配。這并不高效。
。編輯:我把用戶user[0]編輯成用戶user[1],謝謝
。uj5u.com熱心網友回復:
如果你使用的是現代標準的C ,那么你可以這樣做
std::vector<User> vuser {
{"Meilianto1"/span>}。
{"Hantu"},
{"Bebek"}.
};
其中每一對帶字串的內括號呼叫User建構式,外括號呼叫std::vector<User>建構式,有一連串的Users
uj5u.com熱心網友回復:
這里的問題是,我可以將ARRAY與構造器一起宣告嗎?
User user1[1]("Bebek"/span>) 。
你可以使用串列初始化來實作,對于陣列以及向量來說:
User users[] { std:: string("Herbert"/span>), std::string("Anton"/span>) };
std::vector<User> vusers { std::string("Herbert"/span>), std::string("Anton"/span>) };
我可以直接將該物件添加到VECTOR中嗎,而不需要逐一分配所有的成員
。
你可以像這樣用先前定義的陣列的元素來初始化一個向量:
std::vector<User> v2users(std::cbegin(users), std::cend(users))。
BTW:注意你代碼中的User user[0];定義了一個沒有元素的陣列,即大小為0,這很少有意義。訪問user[0]會導致未定義的行為
uj5u.com熱心網友回復:
是的,你可以!
像這樣:
}; //從迭代器對中構造向量: std::vector<User> users_vector{ std::cbegin( users), std::cend( users) };uj5u.com熱心網友回復:
你可以使用emplace_back方法或push_back與臨時物件來添加向量。例如;
vuser.emplace_back("Meilianto1"); /1
vuser.push_back(User{"Meilianto1"}); // 2
第一個將引數傳遞給建構式。第二個將把變數移到向量中。說實話,這將是一個拷貝的問題,這就是為什么沒有移動或拷貝。只是它將構造變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331862.html
標籤:
上一篇:如果我只是在它的物件上呼叫一個方法,一個shared_ptr會被物化嗎?
下一篇:使用Flex將圖示與文本水平對齊
