C++ 使用类';C+中相同类型的向量中的构造函数+;

C++ 使用类';C+中相同类型的向量中的构造函数+;,c++,class,vector,constructor,C++,Class,Vector,Constructor,考虑: MyClass { //constructor MyClass() {} . . . }; 然后,定义相同类型的向量 int main() { . . vector<MyClass>myVector(12); . . intmain() { . . 向量向量机(12); . . 允许这样做吗 for(int i = 0; i < myVector.size(); i++) { //an attempt to fill my

考虑:

MyClass {
    //constructor
    MyClass()
    {}
.
.
.
};
然后,定义相同类型的向量

int main()
{
.
.
    vector<MyClass>myVector(12);
.
.
intmain()
{
.
.
向量向量机(12);
.
.
允许这样做吗

for(int i = 0; i < myVector.size(); i++)
{
    //an attempt to fill my vector with initialized MyClass objects.
    myVector[i] = MyClass(); //Calling constructor
}
for(int i=0;i
或: (在未定义向量大小的情况下)

for(int i=0;i

如果这是不允许的,那么初始化类实例并将它们存储在向量中而不使用指针的替代方法是什么?是否存在这样的情况?

您编写的所有内容都是可以接受的

vector<MyClass>myVector(12);
您提供的另一个变体略有不同

for(int i = 0; i < myVector.size(); i++)
{
    myVector[i] = MyClass();
}
或者你已经看到了

vector<MyClass>myVector;
for(int i = 0; i < 12; i++)
{
    myVector.push_back(MyClass(some_value));
}
vectoryvector;
对于(int i=0;i<12;i++)
{
myVector.push_back(MyClass(某些_值));
}

假设MyClass是可赋值的,它会工作,但毫无意义,因为向量会自动用默认构造函数初始化其元素。如果没有默认构造函数呢?(因为我定义了特定的构造函数)@Gil在这种情况下,
std::vector t(12,MyClass(0))
用您想要的任何默认参数替换
0
的地方应该可以工作。另外请看std::vector::emplace_back。您可以这样将参数传递给构造函数。@abellina这不是C++11的功能吗?这几乎回答了我的问题!如果您愿意,请稍作澄清:如果我定义一个没有MyClass()的类(默认值)构造函数,我在初始化类定义中的向量时会遇到问题吗?或者,甚至可能不定义MyClass()默认构造函数吗?编辑:但是,我会定义其他构造函数,例如MyClass(int)和MyClass(int,bool)@GilDekel是的,有可能,例如,您可以将默认构造函数设置为私有,或者根本不指定它。如果您有默认构造函数,但它是私有的,您可以在其中使用
vector
,而不受任何限制。如果您没有默认构造函数,您仍然可以使用
vector
,就像我在回答中所描述的那样。
for(int i = 0; i < myVector.size(); i++)
{
    myVector[i] = MyClass();
}
vector<MyClass>myVector(12, MyClass(some_value));
vector<MyClass>myVector;
for(int i = 0; i < 12; i++)
{
    myVector.push_back(MyClass(some_value));
}