运算重载实现可变长数组
来源:互联网 发布:高阶矩阵计算 编辑:程序博客网 时间:2024/05/16 23:45
#include <iostream>
#include<cstring>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
class CArray{
int size;//数组元素个数
int *ptr;//指向动态分配的数组
public:
CArray(int s = 0);//s代表数组元素个数
CArray(CArray&a);
~CArray();
void push_back(int v);//用于在数组尾部添加元素v
CArray& operator=(const CArray&a);
//用于数组对象间赋值
int length(){
return size;
}
int& operator[](int i){
//实现n=a[i]; a[i]=4; 非引用返回值不能作为左值使用 返回值不是引用 则a[i]=4 不能使用
return ptr[i];
}
};
CArray::CArray(int s):size(s)
{
if(s == 0)
ptr = NULL;
else
ptr = new int[s];
}
CArray::CArray(CArray &a){
if(!a.ptr){//a是空数组
ptr = NULL;
size = 0;
return;
}
ptr = new int[a.size];
memcpy(ptr,a.ptr,sizeof(int)*a.size);
size = a.size;
}
CArray::~CArray()
{
if(ptr) delete[] ptr;
}
CArray& CArray::operator=(const CArray& a)//C++ 赋值号返回的左边的值是引用
{
//赋值号的作用是=左边对象里存放的数组 大小和内容和右边 的一样 不能指向同一块空间
if( ptr== a.ptr )//防止a=a这样的语句导致出错
return *this;
if(a.ptr == NULL){//如果a里面数组是空的
if(ptr) delete[] ptr;
ptr = NULL;
size = 0;
return *this;
}
if(size < a.size){
if(ptr)
delete[] ptr;
ptr = new int[a.size];
}
memcpy(ptr,a.ptr,sizeof(int)*a.size);
size = a.size;
return *this;
}
void CArray::push_back(int v){
if(ptr){
int *tmpPtr = new int[size+1];
memcpy(tmpPtr,ptr,sizeof(int)*size);
delete[] ptr;
ptr = tmpPtr;
}else
ptr = new int[1];
ptr[size++]=v;//加入新的数组元素
}
int main(int argc, char** argv) {
return 0;
}
#include<cstring>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
class CArray{
int size;//数组元素个数
int *ptr;//指向动态分配的数组
public:
CArray(int s = 0);//s代表数组元素个数
CArray(CArray&a);
~CArray();
void push_back(int v);//用于在数组尾部添加元素v
CArray& operator=(const CArray&a);
//用于数组对象间赋值
int length(){
return size;
}
int& operator[](int i){
//实现n=a[i]; a[i]=4; 非引用返回值不能作为左值使用 返回值不是引用 则a[i]=4 不能使用
return ptr[i];
}
};
CArray::CArray(int s):size(s)
{
if(s == 0)
ptr = NULL;
else
ptr = new int[s];
}
CArray::CArray(CArray &a){
if(!a.ptr){//a是空数组
ptr = NULL;
size = 0;
return;
}
ptr = new int[a.size];
memcpy(ptr,a.ptr,sizeof(int)*a.size);
size = a.size;
}
CArray::~CArray()
{
if(ptr) delete[] ptr;
}
CArray& CArray::operator=(const CArray& a)//C++ 赋值号返回的左边的值是引用
{
//赋值号的作用是=左边对象里存放的数组 大小和内容和右边 的一样 不能指向同一块空间
if( ptr== a.ptr )//防止a=a这样的语句导致出错
return *this;
if(a.ptr == NULL){//如果a里面数组是空的
if(ptr) delete[] ptr;
ptr = NULL;
size = 0;
return *this;
}
if(size < a.size){
if(ptr)
delete[] ptr;
ptr = new int[a.size];
}
memcpy(ptr,a.ptr,sizeof(int)*a.size);
size = a.size;
return *this;
}
void CArray::push_back(int v){
if(ptr){
int *tmpPtr = new int[size+1];
memcpy(tmpPtr,ptr,sizeof(int)*size);
delete[] ptr;
ptr = tmpPtr;
}else
ptr = new int[1];
ptr[size++]=v;//加入新的数组元素
}
int main(int argc, char** argv) {
return 0;
}
0 0
- 运算重载实现可变长数组
- 运算符重载实例:可变长整型数组
- C实现可变长数组
- 【C++的探索路8】运算符重载为友元以及可变长数组程序编写
- C++ 可变长数组类的实现
- 可变长数组的 OO 实现
- 可变长的数组
- 可变长数组
- 可变长数组
- JavaScript可变长数组
- 实现可变长数组的数组-征服C指针
- 可变长数组在gcc编译器中的实现
- 可变长数组在GCC编译器中的实现
- 056day(可变长整型数组的实现)
- 运算符重载实现二维数组旋转
- Lisp语言:可变长数组
- Lisp语言:可变长数组
- C++可变长数组测试
- 黑马程序员09多线程
- 周赛4
- A. Jzzhu and Children
- LeetCode2.1.16(Rotate Image)
- 猫猫学iOS 之CoreLocation地理编码小Demo输入城市得到经纬度
- 运算重载实现可变长数组
- RESTFul架构详解
- Java Map接口HashMap
- swift 跳转页面
- String中的null,"",以及String s;等等的区别详解
- 使用二分法求解
- 1279 - Asteroid Rangers
- 5Longest Palindromic Substring
- 【CF 514D】 R2D2 and Droid Army (线段树、RMQ)