我试图在我创建的动态数组上使用线性搜索功能,但随后我的计算机科学课的助教告诉我们,大多数搜索功能都使用const数组。
有什么办法可以编辑我的动态数组以使其变得持久?或者也可以使搜索函数使用动态数组(并且不会产生错误?)。 我将简要介绍我的代码:
我使用从文件中读取的行动态创建一个数组,然后将每一行动态分配给一个列数组。
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
}
还有其他使用动态多维数组的搜索功能的方法吗?
为回应评论,我不能使用向量。这是我们使用常规数组的任务。我还没有被教过如何使用向量。
答案 0 :(得分:2)
在线
char ** domain[] = new char * [rows];
char ** domain[]
尝试制作char **
的数组。如果编译器没有抱怨[]
中没有有效的数组大小,那么您将拥有3D结构。您只需要普通的char **
用于2D结构,所以
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 **
),并且有两个最大尺寸(maxRow
和maxColumn
)。看起来像
char searchArray(const char ** list,
char letter,
int maxRow,
int maxColumn)
{
>code goes here
}
代码在这里是您的问题,但是可能是两个嵌套的for
循环,迭代到maxRow
和maxColumn
并在找到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;
}
如果找不到该项目,请将row
和column
设置为不可能变为-1的值,以便您可以轻松地测试未发现的情况。
上面没有建立2D数组。您无法在C ++中获得动态分配的2D数组。您拥有的是一个数组数组。这样做有一些弊端,看看将它们缝合在一起的所有工作,当事情成直线时,计算机会喜欢它。数组不是。每个不同的分配都可能在内存中完全不同的某个地方,迫使程序跳来跳去,等待并加载不同的内存块。有时,该程序将花费更多的时间来等待发现和加载东西,而不是花在进行实际工作上。 This sucks.
解决方案是制作一个1D数组并使它看起来像2D数组。 Here's an example of that from the C++ FAQ
通过遵循此示例,您将学到很多精巧的东西,其中最重要的是RAII和Rule of Three,这两个概念没有它们,您将无法编写非平凡的高质量C ++代码