我正在实现一种算法,需要我在循环的每次迭代中从向量中移除和添加相同的元素.
例:
迭代1:| 1 2 3 4 | (4号)
迭代2:| 1 3 | 2 4(大小2,元素'2'和'4'仍在内存中,但没有考虑到矢量的大小)
迭代3:| 1 2 3 | 4(尺寸3,元素'4'仍在那里)
基本上,我希望能够更改size()函数返回的值,而不会出于性能原因影响向量.
我知道我可以使用我的向量之外的另一个变量来跟踪它的大小,但我想知道它是否可以直接在std :: vector容器中内部.
谢谢你的帮助.
你想要的是在逻辑上与vector工作方式不一致.size返回类型的对象的数目T在vector.通过减小尺寸,任何从末端切断的物体都会被破坏.增加大小时,将添加新对象.
这将是更好地建设一个类型身边 vector有你想要的行为.
你不能那样做。
减少所报告的值的唯一方法size()是调整大小。当调整大小减小大小时,就程序而言,新大小之外的元素不再存在。任何访问它们的方法(或在您的情况下重新访问它们)都会产生未定义的行为。
如果您想跟踪正在使用的数组的元素数量(例如,您正在使用具有五个元素的向量的两个元素),则创建一个额外的变量来跟踪它。为了说明(希望)显而易见,该变量需要与向量的大小保持一致(例如,为了避免跟踪在具有五个元素的向量中使用了十个元素)。
如果要将变量与向量一起保留,请将两个成员都设为struct/class类型。该类可以提供管理向量和“使用中”元素数量的成员函数或操作,以确保一致性。