c++ - 为什么 std::vector 调整大小失败?

标签 c++ c++11 vector stl

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

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 添加到您的 vector 中,使用 v.push_back(Product(1)); 会容易得多; 代替。这样您就不必自己调整它的大小。

但是你的问题的答案是第二次resize是没有问题的,因为在调用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));
}

关于c++ - 为什么 std::vector 调整大小失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35787282/

相关文章:

c++ - 为什么我不能用括号初始化从另一个结构派生的结构?

不同通用类型的 C++ 数组

c++ - AABB的球体相交测试

c++ - QNetworkAccessManager没有完成信号

c++ - char * 投入 cout 时得到垃圾

c++ - c++中函数指针语法的理解

c++ - include后找不到sql函数

c++ - 我的枚举不是类或命名空间

c++ - 如何在 hpp 中声明一个 vector ?

c++ - 添加到整数对 vector 和字符串 vector 的元素在函数返回时被清除