在vs2019上仿写向量类vector,至少实现:push_back()在表尾插入元素、insert()在向量的某位置插入元素、clear()清空向量中的元素、size()返回向量中元素的个数、empty()判断是否为空、erase()删除元素等功能。不用仿写迭代器。
时间: 2023-06-09 07:08:49 浏览: 79
vector的迭代器
好的,我了解了你的要求。针对你的问题,我可以给你一些思路和范例代码,以供你参考:
首先,你需要定义一个名为Vector的类,其中需要包含以下成员变量:
1. data指针:指向存储底层数组的指针。
2. size变量:表示当前向量中元素的个数。
3. capacity变量:表示当前向量底层数组的最大容量。
4. resize()函数:用于改变数组的容量。
5. push_back()函数:实现在表尾插入元素。
6. insert()函数:实现在向量的某位置插入元素。
7. clear()函数:清空向量中的元素。
8. size()函数:返回向量中元素的个数。
9. empty()函数:判断是否为空。
10. erase()函数:删除元素。
接下来,我们需要依次实现这些函数。这里通过范例代码来说明:
class Vector{
private:
int *data;
int size;
int capacity;
public:
Vector(){
size = 0;
capacity = 1;
data = new int[capacity];
}
~Vector(){
delete[] data;
}
void resize(int new_size){
capacity = new_size;
int *new_data = new int[capacity];
for(int i = 0; i < size; i++){
new_data[i] = data[i];
}
delete[] data;
data = new_data;
}
void push_back(int val){
if(size == capacity){
resize(capacity * 2);
}
data[size] = val;
size++;
}
void insert(int pos, int val){
if(size == capacity){
resize(capacity *2);
}
for(int i = size-1; i >= pos; i--){
data[i+1] = data[i];
}
data[pos] = val;
size++;
}
void clear(){
size = 0;
}
int size(){
return size;
}
bool empty(){
return size == 0;
}
void erase(int pos){
for(int i = pos + 1; i < size; i++){
data[i-1] = data[i];
}
size--;
}
};
以上就是一个简单的Vector类,实现了基本的功能。这段代码不仅可以在VS2019上运行,也可以在其他编译器上运行。如果想要优化效率,可以考虑使用迭代器等其他技术。
阅读全文