如何在不丢失现有数据的情况下调整std::vector的大小
How to resize an std::vector without loosing the existing data?
我正在实现一个算法,该算法需要我在每次循环迭代时从vector中删除和添加相同的元素。
的例子:
迭代1:|1 2 3 4| (size 4)
迭代2:|1 3| 2 4(大小为2,其中元素'2'和'4'仍在内存中,但未计入vector的大小)
迭代3:|1 2 3| 4(大小为3,元素'4'仍然存在)
基本上,我希望能够改变size()函数返回的值,而不会因为性能原因影响向量。
我知道可以在vector容器外使用另一个变量来跟踪vector的大小,但我想知道是否可以直接在std::vector容器内部实现。
谢谢你的帮助
您想要的在逻辑上与vector
的工作方式不一致。size
返回vector
中类型为T
的对象的个数。通过减小这个尺寸,任何从末端切下来的物体都被破坏了。当您增加大小时,您将添加新对象。
最好在 vector
周围建立一个类型,它具有您想要的行为。
你不能那样做。
减少size()
报告的值的唯一方法是调整大小。当调整大小减少大小时,对于程序而言,新大小之外的元素将不再存在。任何访问它们的方法(或重新访问它们,在您的情况下)都会产生未定义的行为。
如果您想要跟踪正在使用的数组的元素数量(例如,您正在使用具有五个元素的向量的两个元素),那么创建一个额外的变量来跟踪它。很明显,该变量需要与vector的大小保持一致(例如,避免跟踪到有5个元素的vector使用了10个元素)。
如果你想让变量和vector同时存在,让两个成员都是struct
/class
类型。该类可以提供成员函数或操作来同时管理vector和"正在使用"的元素数量,以确保一致性。
我不知道,也许用has-a
代替is-a
?
template <typename T> class subvector {
protected:
std::vector<T> owner_;
std::size_t begin_;
std::size_t end_;
public:
subvector(std::vector<T>& owner, size_t from, size_t to) :
owner_(owner), begin_(from), end_(to)
{
// do some range checks
}
size_t size() const {
// range check before return
// either throw (fast-fail) *or*
// adjust the out-of-range ends (lenient but maybe unsafe)
return end_-begin_+1;
}
// implement as many of the std::vector methods/operators
// you are likely to need in your code by delegation
// to the owner_.
// Stay minimal, whenever you use something you don't have,
// the compiler will tell you.
};
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 调整向量大小并检索值,这是否正确或在任何情况下都可能导致段错误?
- 在不破坏元素的情况下调整std::vector的大小
- C++在没有STL的情况下调整指针数组的大小(向量..)
- C++如何在不丢失数据的情况下调整动态数组的大小
- 我可以在不手动调整Qt大小的情况下调用调整大小事件吗?
- 是否可以在不使指针无效的情况下调整/重新分配大块内存
- 如何在不影响 ALT+F4 或在任务栏中关闭窗口的情况下重新调整窗口关闭按钮的用途?
- 如何在不损失c ++或opencv图像质量的情况下调整图像大小
- 在不初始化数据的情况下调整 std::vector C++的大小<char>
- 如何在不丢失现有数据的情况下调整std::vector的大小
- 如何调整这些函数,使其即使在值范围的极端情况下也能工作?(反向LOG)
- std::在没有提供副本的情况下,使用不安全的移动调整矢量大小
- 在不调用构造函数的情况下调整c++向量的大小