考虑:
MyClass {
//constructor
MyClass()
{}
.
.
.
};
然后,定义相同类型的矢量
int main()
{
.
.
vector<MyClass>myVector(12);
.
.
这是允许的吗?
for(int i = 0; i < myVector.size(); i++)
{
//an attempt to fill my vector with initialized MyClass objects.
myVector[i] = MyClass(); //Calling constructor
}
OR: (在没有定义矢量大小的情况下)
for(int i = 0; i < whatever; i++)
{
//an attempt to fill my vector with initialized MyClass objects.
myVector.push_back(MyClass()); //Calling constructor
}
如果不允许这样做,那么在不使用指针的情况下初始化类实例并将它们存储在向量中的替代方法是什么?有这样的事吗?
答案 0 :(得分:1)
你写的所有内容都是可以接受的。
vector<MyClass>myVector(12);
将调用MyClass
的默认构造函数12次。所以这相当于
vector<MyClass>myVector;
for(int i = 0; i < 12; i++)
{
myVector.push_back(MyClass());
}
您提供的另一种变体略有不同
for(int i = 0; i < myVector.size(); i++)
{
myVector[i] = MyClass();
}
这里矢量的每个元素都已经以某种方式初始化了。因此,当您执行此操作时,将删除先前的MyClass
实例(将调用析构函数),并将元素分配给新实例。
如果您需要将默认构造函数设为private并使用某个值初始化类,则必须使用下一个aproach:
vector<MyClass>myVector(12, MyClass(some_value));
或者你已经看过
vector<MyClass>myVector;
for(int i = 0; i < 12; i++)
{
myVector.push_back(MyClass(some_value));
}