我正在尝试调整在定义的自定义类
上定义的向量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));
}
当我第二次尝试调整大小时,我的代码失败了,我已经查看了其他答案,但我无法理解它背后的想法。
我需要调整矢量大小。
有人可以解释一下吗?有什么解决办法吗?
答案 0 :(得分:6)
如果您想向Product
添加新的vector
,那么使用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));
}