【发布时间】:2020-07-06 11:00:14
【问题描述】:
我非常确定 vector 调用了包含对象的析构函数,我只是在主向量上使用了 clear(),然后我重用了该向量,并且存储在其中的向量的值没有被清除...
编辑 - 代码:
vector<vector<int> > flush1;
flush1.reserve(4);
for(int i = 0; i != 4; ++i) flush1[i].reserve(7);
flush1.clear();
flush1[0].push_back(some_int);
flush1[1].push_back(some_int);
flush1[2].push_back(some_int);
flush1[3].push_back(some_int);
cout the size from flush1[0-3];
flush1.clear();
一次又一次
flush1[0].push_back(some_int);
flush1[1].push_back(some_int);
flush1[2].push_back(some_int);
flush1[3].push_back(some_int);
并从flush1[0-3]中计算大小 cout-s 他们以前的大小+新大小(新旧相加)
【问题讨论】:
-
好的,但我需要时间从我的代码中选择这些部分。
-
你的代码错了,和/或你对容器的理解错了。没有任何合法的方式可以让您得出“元素仍然存在”的结论。
-
存储在其中的向量没有被清除,它们被销毁了。在你调用
clear()之后,主向量没有元素,这就是清楚的重点。因此,您无法确定“存储在其中的向量”是否已清除。里面没有存储向量。 -
问题是,你是如何“重用”向量的?
-
我编辑了这个问题,我并不是说这是不好的 C++ 行为,我只是不知道为什么它不清除存储的向量。