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