数组实现
#include<iostream>
#include<string>
using namespace std;
// 数组实现
class Array{
public:
int *mpArr; // 指向可扩容的数组的指针
int mCap; // 数组的容量
int mCur; // 数组的当前元素个数
public:
Array(int size = 10): mCap(size), mCur(0){
mpArr = new int[mCap];
}
~Array(){
delete []mpArr;
mpArr = nullptr;
}
public:
// 末尾添加元素
void push_back(int val){
if(mCur == mCap){
expand(2 * mCap); // O(n)
}
mpArr[mCur++] = val;
}
// 末尾删除元素
void pop_back(){
if(mCur == 0){
return;
}
mCur--;
}
// 按位置增加元素
void insert(int pos, int val){
if(pos < 0 || pos > mCur){
return; // throw "pos error";
}
if(mCur == mCap){
expand(2 * mCap);
}
// 从后往前移动元素
for(int i = mCur; i > pos; i--){
mpArr[i] = mpArr[i - 1];
}
mpArr[pos] = val;
mCur++;
}
//按位置删除元素
void erase(int pos){
if(pos < 0 || pos >= mCur){
return; // throw "pos error";
}
for(int i = pos; i < mCur - 1; i++){
mpArr[i] = mpArr[i + 1];
}
mCur--;
}
// 元素查询
int find(int val){
for(int i = 0; i < mCur; i++){
if(mpArr[i] == val){
return i;
}
}
return -1;
}
// 打印数组
void print() const{
for(int i = 0; i < mCur; i++){
cout << mpArr[i] << " ";
}
cout << endl;
}
private:
// 扩容
void expand(int size){
int *p = new int[size];
memcpy(p, mpArr, sizeof(int) * mCur);
delete []mpArr;
mpArr = p;
mCap = size;
}
};