为什么std :: vector resize失败?

时间:2016-03-04 03:12:35

标签: c++ c++11 vector stl

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

上定义的向量
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));
}

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

我需要调整矢量大小。

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

1 个答案:

答案 0 :(得分:6)

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

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