为什么std :: vector resize失败?

AAA*_*AAA 0 c++ stl vector c++11

我正在尝试调整在定义的自定义类上定义的向量

class Product{
private:
    Product *next;
    int pid;

public:
    Product(int _pid): pid(_pid){}
};

int main(){
    vector<Product> v;
    v.resize(1, Product(1));
    v[0] = Product(1);
    cout<< v.size() << endl;
    v.resize(2, Product(2));
}
Run Code Online (Sandbox Code Playgroud)

当我第二次尝试调整它时,我的代码失败了,我已经查看了其他答案,但我无法理解它背后的想法.

我有一个要求,我需要调整向量的大小.

有人可以解释一下吗?有什么解决方法吗?

pps*_*psz 6

如果你想要添加新Productvector东西,那么使用它会更容易v.push_back(Product(1));.这样您就不必自己调整大小.

但是你的问题的答案是第二次调整大小没有问题,因为在调用之后v.resize(1, Product(1));,你的大小v1,并且它只能存储一个对象.(由于每一个提醒第一索引array,vector等等于0).您的程序不起作用,因为通过使用v[1] = Product(1);您尝试访问您的第二个索引vector,这超出了范围.

如果您main将此更改为此,则问题将消失:

int main(){
    vector<Product> v;
    v.resize(1, Product(1));
    v[0] = Product(1);
    v.resize(2, Product(2));
}
Run Code Online (Sandbox Code Playgroud)