如何在动态数组上使用搜索函数

How can I use a search function on a dynamic array?

本文关键字:搜索 函数 数组 动态      更新时间:2023-10-16

我试图在我创建的动态数组上使用线性搜索函数,但后来我计算机科学课的助教告诉我们,大多数搜索函数都使用常量数组。

有没有什么方法可以编辑我的动态数组,使其成为contant?或者也可以制作一个使用动态数组的搜索函数(并且不会给出错误?(。我将简要了解我的代码:

我使用从文件中读取的行动态地创建一个数组,然后将每一行动态地分配给一个列数组。

char ** domain[] = new char * [rows];
for(int i = 0; i < rows; i++)
{
*domain = new char[columns];  
domain++;  
}

我们学习的搜索函数类型是:`

char searchArray( const char list[], char letter, int maxSize)
{
>code goes here  
}

有没有其他方法可以使用接收动态多维数组的搜索函数?

作为对评论的回应,我不能使用矢量。这是我们使用普通数组的任务。我还没有学会如何使用矢量。

在行

char ** domain[] = new char * [rows];

CCD_ 1尝试制作CCD_。如果编译器没有抱怨[]中没有有效的数组大小,那么您将拥有一个3D结构。对于2D结构,您只需要普通的旧char **,因此

char ** domain = new char * [rows];

填写内部尺寸的回路是正确的,只是它失去了对domain起点的跟踪

for(int i = 0; i < rows; i++)
{
*domain = new char[columns];  
domain++;  
} 

应该是类似的东西

char ** temp = domain;
for(int i = 0; i < rows; i++)
{
*temp = new char[columns];
temp++;
}

为了保留起点,但在这种情况下,数组表示法可能是更聪明、更容易阅读的选项。

for(int i = 0; i < rows; i++)
{
domain[i] = new char[columns];
}

转到searchArray。它需要知道它得到了两个维度(const char **(,并且有两个最大大小(maxRowmaxColumn(。它看起来有点像

char searchArray(const char ** list, 
char letter, 
int maxRow, 
int maxColumn)
{
>code goes here  
}

这里的代码是您的问题,但可能是两个嵌套的char ** domain[]0循环,迭代到maxRowmaxColumn,并在找到letter时返回。

但是。。。为什么要返回char?返回数组中的位置要有用得多。我们可以使用std::pair,但如果std::vector是禁区,那么pair可能也是禁区。请考虑以下内容:

struct coord
{
int row;
int column;
};
coord searchArray(const char ** list, 
char letter, 
int maxRow, 
int maxColumn)
{
coord location;
>code goes here
return location;
}

如果找不到项目,请将rowcolumn设置为不可能得到的值,如-1,这样您就可以轻松地测试未找到的情况。

除非您想<脏话已删除>用你老师的大脑

以上内容并未构建2D阵列。您无法在C++中获得动态分配的2D数组。您所拥有的是一个数组。这有几个缺点,看看把一个缝合在一起的所有工作,电脑喜欢它,因为事情是直线的。数组数组没有。每一个不同的分配都可能是内存中完全不同的地方,迫使程序跳来跳去,等待并加载不同的内存块。有时,程序会花更多的时间坐在那里等待找到和加载东西,而不是花在实际工作上。这太糟糕了。

解决方案是制作一个1D阵列,使其看起来像2D阵列。下面是一个来自C++常见问题的例子

从这个例子中,你会学到很多巧妙的东西,尤其是RAII和三规则,没有这两个概念,你就无法编写非平凡的高质量C++代码。