c++实现数组的追加;插入;删除;数组是否满;数组是否空;排序;倒置

补充知识:
1.数组的目的是两个目的一个是:
存储不一样,操作就不一样
泛型达到的效果就是:存储不一样操作也一样
2.结构体变量之间可以相互赋值

#include<iostream>
using namespace std;
struct Arr
{
	int* pbase;//首地址
	int len;//数组所能容纳的最大元素的个数
	int cnt;//当前数组有效元素的个数
	//int increment;//自动增长的因子

};//结构体数据类型-定义一个数据类型,该数据类型的名字叫做(struct arr),该数据类型有三个成员
// int a[10];
//int *parr=(int*)malloc(sizeof(int)*len)
//a.add(10)
//a.add(20)
//动态内存扩充
//末尾添加append

实现数组的追加;插入;删除;数组是否满;数组是否空;排序;倒置
bool append_arr(struct Arr* arrs, int val);//追加
bool insert_arr(struct Arr* arrs,int pos,int val);
bool delete_arr(struct Arr* arrs, int pos, int pval);
int get_();
bool is_emptys(struct Arr arr);
bool is_full(struct Arr
arr);
void sort_arr();
void show_arr(struct Arr &arrs);
void inversion_arr();
void init_arr(struct Arr
arrs, int length);
主函数

int main()
{
	//struct Arr* arr;
	struct Arr arrs;
	int length = 6;
	int val;
	init_arr(&arrs,length);
	printf("%d\n", arrs.len);
	append_arr(&arrs, 1);
	append_arr(&arrs, 2);
	append_arr(&arrs, 3);
	append_arr(&arrs, 4);
	append_arr(&arrs, 5);
	//append_arr(&arrs, 6);
	int pos = 3;
	int values = 88;
	if (insert_arr(&arrs, pos, values))
	{
		printf("在第%d个位置成功添加元素%d:\n  ", pos, 88);
	}
	else
	{
		cout << "添加失败" << endl;
	}
	if (delete_arr(&arrs, pos, &val))
	{
		printf("删除成功第%d个元素: ", pos);
		printf("删除陈工的元素%d\n",val);
	}
	else
	{
		printf("删除失败");
	}
	

	show_arr(arrs);

	return 0;
}

判断数组是否为空

bool is_emptys(struct Arr* arrs)
{
	if (arrs->cnt==0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

展示数组中所有元素

void show_arr(struct Arr& arr)
{
	//经典分析:void show_arr(struct Arr* arr,int length)
	//那么arr指针变量指向结构体arr中的pabse变量:arr->pabase//类型是int*
	//&arr表示的是去指针变量arr的地址,指针变量为int 型号,并不是struct arr*的指针变量

	if (is_emptys(&arr))
	{
		cout << "数组为空" << endl;
	}
	else
	{ 
		for (int i = 0;i < arr.cnt;i++)
		{
			cout << "数组的值大小为:" << *(arr.pbase) << " " << "地址为: " << arr.pbase << endl;
			arr.pbase++;
		}
	
	}
	
}

//数组初始化

void init_arr(struct Arr* arrs,int length)
{
	arrs->pbase = (int*)malloc(sizeof(int) * length);  **//相当于arrs指针变量所指向结构体变量中的pbase**
	if (NULL == arrs->pbase)
	{
		printf("动态内存分配失败");
		exit(-1);//终止整个程序
	}
	else
	{
		arrs->len = length;
		arrs->cnt = 0;
	}
	return;//函数终止

}

数组追加

bool append_arr(struct Arr* arrs, int val)
{
	if (is_full(arrs))
	{
		return false;
	}
	else
	{
		arrs->pbase[arrs->cnt] = val;
		(arrs->cnt)++;
		return true;
	}
}

判断数组是否满

bool is_full(struct Arr* arr)
{
	if (arr->cnt == arr->len)
	{
		printf("%s\n", "数组已满了");
		return true;
	}
	else
	{
		return false;
	}
}

数组插入解题思路

//在添加元素的时候
//确定位置必须>=1,并且小于cnt+1,说白了5个数字,不可能在第七个位置添加
//确定在第4个位置添加 a[5]=a[4]
//那么从if(i=有效长度开始递减;i>=pos;i++
//最后a[pos-1]=插入的值

插入数组

bool insert_arr(struct Arr* arrs, int pos, int val)
{
	if (is_full(arrs))
	{
		return false;
	}
	if (pos<1 || pos>arrs->cnt + 1)
		return false;
	//在第3个位置插入数字8,那么索引2,往后的数字全部要偏移  
	for (int i = arrs->cnt;i >=pos;i--)
	{
		arrs->pbase[i] = arrs->pbase[i-1];
			
	}
	arrs->pbase[pos - 1] = val;
	(arrs->cnt)++;

	
}

删除数组中指定位置删除某个元素解题思路

//在删除元素
//确定位置 位置必须大于1,小于等于有效长度个数
// 确定删除位置第4个
//删除元素,也就说a[b-1]的位置=a[b]的位置替代a[3]=a[4]
//那么其中位置固定if(i=pos-1;i<cnt;i++)
//a[pos-1]取出

删除数组中指定位置删除某个元素

bool delete_arr(struct Arr* arrs, int pos, int* pval)
{
	if (is_emptys(arrs))
	{
		cout << "数组为空" << endl;
	}
	*pval=arrs->pbase[pos - 1];
	if (pos<1 || pos>arrs->cnt)
		return false;
	else
	{
		for (int i = pos-1;i < arrs->cnt;i++)
		{
			arrs->pbase[i] = arrs->pbase[i+1];
		}
		(arrs->cnt)--;

	}
	return true;
}
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你有一个 C++ 数组,想要在 Python 中将其转化为 NumPy 矩阵,可以使用 `numpy.ctypeslib.as_array()` 函数。具体步骤如下: 1. 首先,需要将 C++ 数组导出为一个动态链接库(DLL 或 SO 文件),使得 Python 可以调用其中的函数。 2. 在 Python 中,使用 `numpy.ctypeslib.load_library()` 函数加载这个动态链接库,然后使用 `numpy.ctypeslib.as_array()` 函数将 C++ 数组转化为 NumPy 数组。 3. 最后,使用 `numpy.matrix()` 函数将 NumPy 数组转化为矩阵。 下面是一个简单的示例,假设有一个 C++ 数组 `a`,包含了一个 2x3 的矩阵: ```c++ // example.cpp #include <iostream> using namespace std; extern "C" { void get_array(double* arr, int m, int n) { double a[2][3] = {{1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}}; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { arr[i * n + j] = a[i][j]; } } } } ``` 这是一个简单的函数,将一个 2x3 的矩阵导出为一个 C++ 数组。现在,可以使用 CMake 编译这个函数,生成一个名为 `example.so` 的动态链接库: ```cmake # CMakeLists.txt cmake_minimum_required(VERSION 3.0) project(example) set(CMAKE_CXX_STANDARD 11) set(CMAKE_POSITION_INDEPENDENT_CODE ON) add_library(example SHARED example.cpp) ``` 在 Python 中,可以使用下面的代码加载这个动态链接库,并将其中的数组转化为矩阵: ```python import numpy as np from numpy.ctypeslib import load_library, as_array # 加载动态链接库 lib = load_library('example.so', '.') # 调用函数,获取数组 m, n = 2, 3 arr = np.zeros((m, n)) lib.get_array(arr.ctypes.data_as(np.ctypeslib.c_void_p), m, n) # 将数组转化为矩阵 mat = np.matrix(arr) print(mat) ``` 输出结果如下: ``` [[1. 2. 3.] [4. 5. 6.]] ``` 需要注意的是,这种方法需要掌握 C++ 和 Python 的基础知识,如果不熟悉其中的一方,可能会遇到困难。此外,由于涉及到动态链接库的编译和加载,也会增加一定的复杂度。因此,如果在 Python 中处理矩阵是你的主要目的,建议直接使用 NumPy 数组,避免使用 C++ 数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值