自定义向量/动态数组C++;问题 我试图在C++中制作自己的向量,这样我就能更好地理解它是如何工作的! 代码如下: #pragma once template<typename T> class Vector { public: Vector() { // allocate 2 elements ReAlloc(2); } void pushBack(const T& value) { if (m_Size >= m_Capacity) { ReAlloc(m_Capacity / 2); } m_Data[m_Size++] = value; } const T& operator[](size_t index) const { /* if (index >= m_Size) { // assert } */ return m_Data[index]; } T& operator[](size_t index) { /* if (index >= m_Size) { // assert } */ return m_Data[index]; } const size_t Size() const { return m_Size; } size_t Size() { return m_Size; } private: T* m_Data = nullptr; size_t m_Size = 0; size_t m_Capacity = 0; private: void ReAlloc(size_t newCapacity) { // 1. allocate a new block of memory // 2. copy/move old elements into the new block // 3. delete the old one T* newBlock = new T[newCapacity]; if (newCapacity < m_Size) { m_Size = newCapacity; } for (size_t i = 0; i < m_Size; i++) { newBlock[i] = m_Data[i]; } delete[] m_Data; m_Data = newBlock; m_Capacity = newCapacity; } }; 它甚至不打印C++,代码也奇怪,每当我尝试改变任何东西时,输出变得更混乱,有人能告诉我,我做错什么了吗?!! Thx!:)

自定义向量/动态数组C++;问题 我试图在C++中制作自己的向量,这样我就能更好地理解它是如何工作的! 代码如下: #pragma once template<typename T> class Vector { public: Vector() { // allocate 2 elements ReAlloc(2); } void pushBack(const T& value) { if (m_Size >= m_Capacity) { ReAlloc(m_Capacity / 2); } m_Data[m_Size++] = value; } const T& operator[](size_t index) const { /* if (index >= m_Size) { // assert } */ return m_Data[index]; } T& operator[](size_t index) { /* if (index >= m_Size) { // assert } */ return m_Data[index]; } const size_t Size() const { return m_Size; } size_t Size() { return m_Size; } private: T* m_Data = nullptr; size_t m_Size = 0; size_t m_Capacity = 0; private: void ReAlloc(size_t newCapacity) { // 1. allocate a new block of memory // 2. copy/move old elements into the new block // 3. delete the old one T* newBlock = new T[newCapacity]; if (newCapacity < m_Size) { m_Size = newCapacity; } for (size_t i = 0; i < m_Size; i++) { newBlock[i] = m_Data[i]; } delete[] m_Data; m_Data = newBlock; m_Capacity = newCapacity; } }; 它甚至不打印C++,代码也奇怪,每当我尝试改变任何东西时,输出变得更混乱,有人能告诉我,我做错什么了吗?!! Thx!:),c++,vector,dynamic-arrays,C++,Vector,Dynamic Arrays,在后推功能中,当大小大于或等于容量时,您正在执行: ReAlloc(m_Capacity / 2); 这没有道理。如果需要额外的空间来添加元素,则应增加基础阵列的容量,而不是将其减少一半 您可能正在寻找: ReAlloc(m_Capacity * 2); 这使基础容量增加了一倍 这是一个工作,没有任何segfault。不相关,这两个函数const size\u t size()const{return m\u size;}size\u t size(){return m\u size;}是无

后推功能中,当大小大于或等于容量时,您正在执行:

ReAlloc(m_Capacity / 2);
这没有道理。如果需要额外的空间来添加元素,则应增加基础阵列的容量,而不是将其减少一半

您可能正在寻找:

ReAlloc(m_Capacity * 2);
这使基础容量增加了一倍


这是一个工作,没有任何segfault。

不相关,这两个函数
const size\u t size()const{return m\u size;}size\u t size(){return m\u size;}
是无用的。将它们合并到一个函数中。实际上,我正试图执行类似“ReAlloc(m_Size/2)”,但我意外地执行了“ReAlloc(m_Capacity/2)”,我现在更正了它,但代码仍然不起作用。它不打印任何内容,并给我这个退出代码”(流程15228),退出代码为-1073741819。“但是,
ReAlloc(m_Size/2)也会出现同样的问题当你需要更多的内存时,为什么分配更少的内存?因为如果我这样做“m_Size*2”,如果大小是2,它会增加到4,我想将它增加一半,因此如果大小是4,我想将它增加到4的一半,即2,因此它会变成6,而不是8,以节省更多内存:)@AMZ这是非常低效的。通常的做法是通过每次加倍分配的内存来避免昂贵的重新分配。@AMZ“我完全忘记了优先级总是要除法”-然后最好总是明确表示您真正想要什么,例如:
ReAlloc(m_size+(m_size/2))
注意,如果
m_Size
为1,则此操作失败,因为
1/2
在整数数学中为0,因此数组不会增长
ReAlloc(m_Capacity / 2);
ReAlloc(m_Capacity * 2);