我正在编写管理对象的动态数组的类。现在我遇到了应该在给定索引处插入元素的方法,但在它检查索引是否不比数组容量大之前。然后它应该先调整数组大小。在if语句上重新初始化数组
template <class T>
void MyVector<T>::insertAt(int index, const T &m_element) {
if(p_size == p_capacity) extendArray();
if(index >= p_capacity) extendArray(index);
p_size++;
p_array[index] = m_element;
}
template <class T>
void MyVector<T>::extendArray(int new_capacity) {
std::unique_ptr<T[]> temp_array = std::make_unique<T[]>(new_capacity);
for (int i = 0; i <= p_size; i++) {
temp_array[i] = p_array[i];
}
p_array.reset();
p_array = std::make_unique<T[]>(new_capacity);
for (int i = 0; i <= p_size; i++) {
p_array[i] = temp_array[i];
}
}
extendArray()只延伸阵列容量的2倍,extendArray(INT)延伸阵列容量由索引给出的数字。第一种方法工作正常,其次不是那么真。
int main(){
MyVector<int> test;
test.insertAt(0, 5);
test.insertAt(1, 3);
test.insertAt(2, 1);
test.insertAt(6, 11);
cout <<"Size " << test.getSize() << "\n";
for(int i = 0; i < test.getCapacity(); i++) {
cout << test.get(i) << ", ";
}
}
标识期望像5,3,1,0,0,0,11,0 但我得到的只是5,3,1,0所以它永远不会扩展阵列,但它增加的大小(数元件)。
'for(int i = 0; i <= p_size ...'A'for'循环使用'<='会产生红色标记,这些红色标记是错误的。自己的类而不是使用'std :: vector'? – PaulMcKenzie
'if(index> = p_capacity)extendArray(index);'假设您有2个元素数组,索引0和1。这个索引作为新的大小,并最终... ...相同的2元素数组。什么是捕获? –
是纠正了循环。我只是学习的东西,认为让我自己的类工作类似于std: :vector会教会我一些构造函数使得p_capacity = 2如果我想在索引4处插入它不存在的东西(index> capacity)这就是为什么我想调整我的数组的大小首先是容量可以包含给定的索引 – Emdzej93