C++实现一个简单的动态数组
/**---------------------------------------
* 文件名称: CDynamicArray.h
* 功能描述: 实现数组函数
* 创建标识: xad 2022/2/8
*
* 修改标识:
* 修改描述:
------------------------------------------**/
#ifndef CDYNAMICARRAY_AYNAMICARRAY_H
#define CDYNAMICARRAY_AYNAMICARRAY_H
#include <iostream>
#include <string>
class CDynamicArray
{
private:
int* _pArr; //存储动态数组的对象
int _nSize; //数组元素的个数
int _nCapacity; //数组容量
public:
CDynamicArray();
~CDynamicArray();
/**
* @brief 添加元素
*
* @param int value
* @return void
*/
void push_back_array(int value);
void insert_array(int pos, int value);
/**
* @brief 移除某个位置元素
*
* @param int pos
* @return void
*/
void remove_array_pos(int pos);
/**
* @brief 删除数组中的值
*
* @param int value
* @return void
*/
void remove_array_value(int value);
/**
* @brief 查找元数位置
*
* @param int value
* @return int
*/
int find_array(int value);
/**
* @brief 清除数组
*
* @param void
* @return void
*/
void clear_array(void);
/**
* @brief 获取元素个数
*
* @param void
* @return int
*/
int get_size(void);
/**
* @brief 获取容量大小
*
* @param void
* @return int
*/
int get_capacity(void);
/**
* @brief 查找某个位置的元素
*
* @param int pos
* @return int
*/
int at_array(int pos);
/**
* @brief 查找某个位置的元素
*
* @param int pos
* @param int & value
* @return bool
*/
bool at_array(int pos, int &value);
/**
* @brief 打印数组
*
* @param void
* @return void
*/
void print_array(void);
};
#endif CDYNAMICARRAY_AYNAMICARRAY_H
#include "DynamicArray.h"
CDynamicArray::CDynamicArray()
{
_pArr = nullptr;
_nSize = 0;
_nCapacity = 20;
_pArr = new int[_nCapacity];
}
CDynamicArray::~CDynamicArray()
{
if (_pArr != nullptr)
{
delete[] _pArr;
_pArr = nullptr;
}
std::cout << "free DynaimcArray Object" << std::endl;
}
void CDynamicArray::push_back_array(int value)
{
if (_pArr == nullptr)
{
return;
}
if (_nSize == _nCapacity)
{
_nCapacity = _nCapacity * 2;
int* pNewArr = new int[_nCapacity];
memcpy(pNewArr, _pArr, _nCapacity * sizeof(int));
delete[] _pArr;
_pArr = pNewArr;
_pArr[_nSize++] = value;
}
else
{
_pArr[_nSize] = value;
_nSize++;
}
}
void CDynamicArray::insert_array(int pos, int value)
{
if (_pArr == nullptr|| pos >_nSize || pos < 0)
{
return;
}
if (pos == _nSize && _nSize + 1 < _nCapacity)
{
push_back_array(value);
return;
}
int i = _nSize;
if (pos < _nSize && _nSize + 1 < _nCapacity)
{
for (; i > pos; i--)
{
_pArr[i] = _pArr[i - 1];
}
_pArr[i] = value;
_nSize++;
}
else
{
int* newAddr = new int[_nCapacity * 2];
memcpy(newAddr, _pArr, _nCapacity * sizeof(int));
delete[] _pArr;
_pArr = newAddr;
_nCapacity = _nCapacity * 2;
for (; i > pos; i--)
{
_pArr[i] = _pArr[i - 1];
}
_pArr[i] = value;
_nSize++;
}
}
void CDynamicArray::remove_array_pos(int pos)
{
if (_pArr == nullptr)
{
return;
}
if (pos < 0 || pos >= _nSize)
{
return;
}
for (int i = pos; i < _nSize - 1; i++)
{
_pArr[i] = _pArr[i + 1];
}
_nSize--;
}
void CDynamicArray::remove_array_value(int value)
{
if ( _pArr == nullptr)
{
return;
}
int pos = find_array(value);
remove_array_pos(pos);
}
int CDynamicArray::find_array(int value)
{
if (_pArr == nullptr)
{
return -1;
}
int pos = -1;
for (int i = 0; i < _nSize; i++)
{
if (_pArr[i] == value)
{
pos = i;
break;
}
}
return pos;
}
void CDynamicArray::clear_array(void)
{
_nSize = 0;
}
int CDynamicArray::get_size(void)
{
return _nSize;
}
int CDynamicArray::get_capacity(void)
{
return _nCapacity;
}
int CDynamicArray::at_array(int pos)
{
return _pArr[pos];
}
bool CDynamicArray::at_array(int pos, int & value)
{
if (_pArr == nullptr || pos < 0 || pos >= _nSize|| pos >= _nCapacity)
{
return false;
}
value = _pArr[pos];
return true;
}
void CDynamicArray::print_array(void)
{
if (_pArr == nullptr)
{
return;
}
for (int i = 0; i < _nSize;i++)
{
std::cout << _pArr[i] << " ";
}
std::cout << std::endl;
}
#include <iostream>
#include <vector>
#include "DynamicArray.h"
using namespace std;
void test_01(void);
int main()
{
test_01();
system("pause");
return 0;
}
void test_01(void)
{
CDynamicArray array;
array.push_back_array(1);
array.push_back_array(2);
array.push_back_array(31);
array.push_back_array(4);
array.push_back_array(5);
array.push_back_array(6);
array.push_back_array(8);
array.print_array();
std::cout << endl;
std::cout << "at_array"<< array.at_array(3)<<"get_capacity:" << array.get_capacity() <<"get_size:"<< array.get_size();
std::cout << std::endl;
array.remove_array_pos(5);
array.remove_array_pos(4);
array.print_array();
array.push_back_array(1);
array.push_back_array(2);
array.push_back_array(31);
array.push_back_array(4);
array.push_back_array(5);
array.push_back_array(6);
array.push_back_array(8);
array.push_back_array(1);
array.push_back_array(2);
array.push_back_array(31);
array.push_back_array(4);
array.push_back_array(5);
array.push_back_array(6);
array.push_back_array(8);
array.push_back_array(1);
array.push_back_array(2);
array.push_back_array(31);
array.push_back_array(4);
array.push_back_array(5);
array.push_back_array(6);
array.push_back_array(8);
array.push_back_array(1);
array.push_back_array(2);
std::cout << "at_array" << array.at_array(3) << "get_capacity:" << array.get_capacity() << "get_size:" << array.get_size();
int value = -1;
int pos = 3;
array.at_array(pos, value);
std::cout << "at_array:"<< value << endl;
array.clear_array();
array.print_array();
std::cout << "find_array:"<< array.find_array(4)<<std::endl;
array.push_back_array(6);
array.push_back_array(8);
array.push_back_array(1);
array.push_back_array(2);
array.insert_array(3, 11);
std::cout << "--------------" << endl;
array.print_array();
std::vector<int> VecArr;
}