龙空技术网

C++学习大纲:数组类型

中国编程2025 227

前言:

当前朋友们对“c语言数组的类型有哪些”大致比较珍视,姐妹们都需要知道一些“c语言数组的类型有哪些”的相关文章。那么小编同时在网上搜集了一些有关“c语言数组的类型有哪些””的相关资讯,希望看官们能喜欢,小伙伴们一起来了解一下吧!


C++ 数组类型

数组类型是一种有固定多个同类型的元素按一定次序所构成的数据类型。

1. 一维数组

1)定义

<元素类型> <一维数组变量名>[<元素个数>];

也可以借助 typedef 类定义

typedef <元素类型> <一维数组类型名>[<元素个数>]; <一维数组类型名> <一维数组变量名>

2)操作

通过下标访问元素。

注意下标是否越界。(C++中为了保证程序的执行效率不对下标越界进行检查,越界时可以运行,但是结果不可预测)

初始化

int a[10] = {1,2,3};//其他元素初始化为0

int a[] = {1,2,3};//元素个数为3

2. 二维数组

1)定义

原理同一维数组

2)初始化

int a[2][3] = {{1,2,3},{4,5,6}}; 等同于 int a[2][3] = {1,2,3,4,5,6};//二维数组可以转成一维数组进行处理,但是要注意下标

int a[][3] = {{1,2},{3,4,5}};//第一个下标可以省略,其他的不能,更高维的数组也同此。

按行存储!

————————————————


c++实现一个数组类

老师上课敲的例子,修改了一个bug

1 该数组类支持在对应位置删除和插入元素

2 静态对象只能调用静态成员函数,因此[]符重载用了两个版本

类头文件

#pragma once

class MyVect

{

public:

MyVect();

MyVect(int n);

MyVect(const MyVect& other); //拷贝构造函数

MyVect& operator = (const MyVect& rhs); //重载赋值符

void push_back(double var);

double pop_back();

void insert(int n, double var);

void erase(int n);

void reallocate(); //重新分配内存

void clear();

void print();

double& operator[](int n); //重载[]符

const double& operator[](int n)const; //const成员函数,返回值是const

virtual ~MyVect();

private:

double* date; //数组指针

int date_size; //数组实际大小

int date_capacity; //数组容量

};


类源文件

#include "MyVect.h"

#include<iostream>

using namespace std;

MyVect::MyVect()

{

date = nullptr;

date_size = 0;

date_capacity = 0;

}

MyVect::MyVect(int n)

{

date_size = n;

date_capacity = 2 * n + 1;

date = new double[date_capacity];

}

double& MyVect::operator[](int n)

{

return date[n];

}

const double& MyVect::operator[](int n) const //常成员函数供常对象调用

{

return date[n];

}

MyVect& MyVect::operator=(const MyVect& rhs) //重载赋值符

{

if (this == &rhs)

{

return *this;

}

date_capacity = rhs.date_capacity;

date_size = rhs.date_size;

if (date != nullptr)

{

delete[] date;

}

date = new double[date_capacity];

for (int i = 0; i < rhs.date_size; i++)

{

date[i] = rhs.date[i];

}

return *this;

}

MyVect::MyVect(const MyVect& other)

{

this->date_size = other.date_size;

this->date_capacity = other.date_capacity;

date = new double[date_capacity];

for (int i = 0; i < date_size; i++)

{

date[i] = other.date[i];

}

}

void MyVect::reallocate() //重新分配内存

{

if (date_size == date_capacity)

{

double* old = date;

date_capacity = 2 * date_size + 1;

date = new double[date_capacity];

for (int i = 0; i < date_size; i++)

{

date[i] = old[i];

}

if (old != nullptr)

delete[] old;

}

}

void MyVect::push_back(double var)

{

this->reallocate();

date[date_size] = var;

date_size++;

}

double MyVect::pop_back()

{

double out = date[date_size-1];

date_size--;

return out;

}

void MyVect::insert(int n, double var)

{

reallocate();

for (int i = date_size; i >n; i--)

{

date[i] = date[i-1];

}

date[n] = var;

date_size++;

}

void MyVect::erase(int n)

{

for (int i = n; i < date_size; i++)

{

date[i] = date[i + 1];

}

date_size--;

}

void MyVect::clear()

{

date_size = 0;

date_capacity = 0;

if (date != nullptr)

delete [] date;

date = nullptr; //此句不可忘,否则析构时删除野指针出现内存错误

}

void MyVect::print()

{

for (int i = 0; i < date_size; i++)

cout << date[i] << '\t';

cout << endl;

}

MyVect::~MyVect()

{

date_size = 0;

date_capacity = 0;

if (date!=nullptr)

{

delete[] date;

}

date = nullptr;

//cout << "析构啦!" << endl;

}

————————————————

通过分享实用的计算机编程语言干货,推动中国编程到2025年基本实现普及化,使编程变得全民皆知,最终实现中国编程之崛起,这里是中国编程2025,感谢大家的支持。

原文链接:

标签: #c语言数组的类型有哪些