显示任何类型的{1}或2维数组内容的函数

时间:2015-08-31 03:09:34

标签: c++ c arrays algorithm

我需要能够显示各种数组的内容(此时用于调试目的),并决定编写一个函数来帮助我。这就是我提出的。 目标是能够显示任何类型的传入数组(int,double等)。 因为我从来没有接受过任何正式的编程培训,所以我想知道我所拥有的是否也是如此,并且不那么优雅"通过对一个优秀的计算机科学人员做一些明显的事情可以改善,但对于一个非专业人士则不然。

int
DisplayArrayInDebugWindow(
void**              incoming_array,
char*               array_type_str,
int                 array_last_index_dim_size,
int                 array_terminator,
HWND                handle_to_display_window,
wchar_t*            optional_array_name     ) 
{

wchar_t             message_bufferw[1000];
    message_bufferw[0] =                                                        L'\0';
wchar_t             temp_buffer[400];
if ( array_last_index_dim_size == 0 ) { array_last_index_dim_size =             1; }

// ----------------------------------------------------------------------------
// Processing for "int" type array
// ----------------------------------------------------------------------------
if (    0 == (strcmp( array_type_str, "int" ))  )
{

    int             j =                                                         0;
    swprintf( temp_buffer,                                                      L"%s\r\n", optional_array_name );
    wcscat( message_bufferw,                                                    temp_buffer );
    for ( int i = 0; ((int)(*((int*)( (int)incoming_array + i * (int)sizeof(int) * array_last_index_dim_size + j * (int)sizeof(int))))) != array_terminator; i++ )
    {
        swprintf( temp_buffer, L"%02i:\t", i );
        wcscat( message_bufferw,                                                temp_buffer );
        for ( j; j < last_array_dim_size; j++ )
        {
            swprintf( temp_buffer, L"%i\t", ((int)(*((int*)( (int)incoming_array + i  * (int)sizeof(int) * array_last_index_dim_size + j * (int)sizeof(int) )))) ); //
            wcscat( message_bufferw,                                            temp_buffer );
        }   
        wcscat( message_bufferw,                                                L"\r\n" );

        // --------------------------------------------------------------------
        // reset j to 0 each time
        // --------------------------------------------------------------------
        j =                                                                     0;
    }
    swprintf( temp_buffer,                                                      L"\nEnd of Array\n" );
    wcscat( message_bufferw,                                                    temp_buffer );
    SetWindowText( handle_to_display_window, message_bufferw );
}


return 0;
}

注意:当我传入&#34;传入数组&#34;时,我输入它显然为(void **)。

1 个答案:

答案 0 :(得分:0)

当数据类型发生变化但算法没有时,是时候考虑使用模板。

template<class Element_Type>
print_array(Element_Type const * p_begin,
            Element_Type const * p_end)
{
  while (p_begin != p_end)
  {
    cout << *p_begin;
    ++p_begin;
  }
}

从单维到多维的转换留给了OP和读者。

编辑1:另一种选择
在某些时候,输出功能将需要有关如何打印您提供的信息的信息。

一个选项是您编写自己的printf函数,该函数具有您发送数据的格式说明符。

另一种选择是将指针传递给打印数据的函数。

基本问题是输出功能需要知道如何打印数据。

对于C ++,我建议在类/结构中覆盖operator<<。由于类/结构知道数据,因此很容易知道如何打印数据。