C++ 将向量中的对象推回而不包含该对象
我知道在向量中推回一个对象的正确方法是声明同一类的对象,并将其作为方法push_back的参数按值传递。i、 例如C++ 将向量中的对象推回而不包含该对象,c++,class,object,vector,push-back,C++,Class,Object,Vector,Push Back,我知道在向量中推回一个对象的正确方法是声明同一类的对象,并将其作为方法push_back的参数按值传递。i、 例如 class MyClass{ int a; int b; int c; }; int main(){ std::vector<MyClass> myvector; MyClass myobject; myobject.a = 1; myobject.b = 2; myobject.c = 3;
class MyClass{
int a;
int b;
int c;
};
int main(){
std::vector<MyClass> myvector;
MyClass myobject;
myobject.a = 1;
myobject.b = 2;
myobject.c = 3;
myvector.push_back(myobject);
return 0;
}
class MyClass{
int a;
int b;
int c;
};
int main(){
std::vector<MyClass> myvector;
int a = 1;
int b = 2;
int c = 3;
myvector.push_back({a, b, c});
return 0;
}
class-MyClass{
INTA;
int b;
INTC;
};
int main(){
std::vector myvector;
MyClass myobject;
myobject.a=1;
myobject.b=2;
myobject.c=3;
myvector.push_back(myobject);
返回0;
}
我的问题是:有可能推回一个只传递对象值而不传递另一个对象值的对象吗?i、 例如
class MyClass{
int a;
int b;
int c;
};
int main(){
std::vector<MyClass> myvector;
MyClass myobject;
myobject.a = 1;
myobject.b = 2;
myobject.c = 3;
myvector.push_back(myobject);
return 0;
}
class MyClass{
int a;
int b;
int c;
};
int main(){
std::vector<MyClass> myvector;
int a = 1;
int b = 2;
int c = 3;
myvector.push_back({a, b, c});
return 0;
}
class-MyClass{
INTA;
int b;
INTC;
};
int main(){
std::vector myvector;
INTA=1;
int b=2;
int c=3;
myvector.push_back({a,b,c});
返回0;
}
如果您将a
,b
,c
声明为公共
class MyClass{
public:
int a;
int b;
int c;
};
然后你可以使用:
但最好是构造一个构造函数
MyClass::MyClass(int a, int b, int c):
a(a), b(b), c(c)
{}
然后使用
要使其正常工作,您至少需要一个C++11编译器,还需要构造一个构造函数:
class MyClass {
int a;
int b;
int c;
public:
MyClass(int a_, int b_, int c_) : a(a_), b(b_), c(c_) {}
};
您也可以将a
、b
和c
公开,但我猜您不想这样做,因为这会更改类的接口
在回答您的问题“为什么emplace\u back
比push\u back
更好或更高效?”
根据设计,
emplace_back()
应避免创建临时对象,并应在向量末尾构建“就地”。使用push_back({a,b,c})
创建一个临时MyClass
对象,然后将其复制到向量的末尾。当然,编译器优化实际上可能会导致在这两种情况下生成相同的代码,但默认情况下,emplace\u back()
应该更有效。这里进一步讨论:.如果类的成员是公共的,那么可以说myvector.push_back({a,b,c})
。我假设你建议放回
,但你没有这样说。@NeilKirk实际上放回({a,b,c})
也可以(使用构造函数或公共数据)。(emplace_back
稍微好一点,但那是另一个故事。)@NeilKirk使用emplace_back()很好,这个问题,至少我是如何得到的,是本着“推后是否可能”的精神,而不是“最有效的方法是什么”。此外,AlexD已经介绍了emplace_back()。提供的答案满足了我的需要。无论如何,为什么emplace\u back
比push\u back
更好或更有效?emplace\u back()
是在C++11中添加的。对于早期版本,定义构造函数仍然很有用,然后您可以这样做:myvector.push_back(MyClass(a,b,c))代码>