为什么 std::矢量调整大小失败

Why std::vector resize fails?

本文关键字:调整 失败 std 为什么      更新时间:2023-10-16

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

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));
}

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

我有一个要求,我需要调整矢量的大小。

有人可以解释一下吗?

如果您想向vector添加新Product,则使用v.push_back(Product(1));会更容易。这样,您就不必自己调整其大小。

但是你的问题的答案是第二次调整大小没有问题,因为在调用v.resize(1, Product(1));后,你的v的大小是1,并且它只能存储一个对象。(作为提醒,每个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));
}