2016-11-16 18 views
-2

Мне было интересно, может ли кто-нибудь помочь мне, я сделал эту простую программу ниже, чтобы попробовать использовать 2d массивы. Я использую cout в настоящее время для отображения информации, но я бы хотел использовать функцию отображения, но я не уверен, как это сделать правильно.C++ 2d array Функция отображения

Любая помощь будет оценена по достоинству.

(комментируемого раздел только показывает выход с соиЬ при запуске программы)

#include <iostream> 
    #include <array> 
    using namespace std; 

    int main() 
    { 

     int [3][3] = { {},{},{} }; 

     cout <<" " << " " << "" << " " << "" << endl; 
     cout << " "<< m[0][0] << " " << m[0][1] << " " << m[0][2] << endl; 
     cout << " " << m[1][0] << " " << m[1][1] << " " << m[1][2] << endl; 
     cout << " " << m[2][0] << " " << m[2][1] << " " << m[2][2] << endl; 

    return 0; 
    } 

ответ

0
int m[3][3] = { {2,1,8},{5,3,9},{2,0,9} }; 
    display(m); 

процедура отображения:

void display(int m[3][3]) 
{ 
     cout <<" Medal1" << " " << "Medal2" << " " << "Medal3" << endl; 
    for (int i=0 ;i<3;i++){ 
     cout << "Country"<<i+1<<"  "; 
     for (int j=0 ;j<3;j++){ 
    cout<< m[i][j] << " " ; 
    if(j==2) 
     cout<<endl; 
     }} 

} 

Надеюсь, это поможет.

0

Вот функция отображения для 2d массива:

void print_it(const int m[3][3]){ 
    cout << "Medal " << 1 << '\t' << 2 << '\t' << 3 << endl; 
    cout << '\n'; 
    cout << "Country1 " << m[0][0] << '\t' << m[0][1] << '\t' << m[0][2] << << '\n'; 
    cout << "Country2 " << m[1][0] << '\t' << m[1][1] << '\t' << m[1][2] << << '\n'; 
    cout << "Country3 " << m[2][0] << '\t' << m[2][1] << '\t' << m[2][2] << << '\n'; 

} 

Просто назвать это так в вашем main():

int main() 
{ 

    int m[3][3] = { { 2, 1, 8 }, { 5, 3, 9 }, { 2, 0, 9 } }; 

    print_it(m); 

    return 0; 
} 

Ну, это не очень хорошая (не современная) реализация. Это, безусловно, работает только для массивов размером 3 x 3 (кроме вас, если вы хотите указать указатели, пропустить размеры ... но это становится беспорядочным). Поэтому, пожалуйста, рассмотрите возможность использования современного контейнера, такого как <vector> (или <array>, как вы его включили). Чем вы можете напечатать любой NXM массив:

#include <vector> 
#include <iostream> 

void print_it(const std::vector<std::vector<int>> &m){ 
    std::cout << "Medal "; 
    for (int i = 0; i < m[0].size(); ++i){ 
     std::cout << i << '\t'; 
    } 

    std::cout << "\n---------------------------------\n"; 

    for (int y = 0; y < m.size(); ++y){ 
     std::cout << "Country" << y + 1 << ' '; 
     for (int x = 0; x < m[0].size(); ++x){ 
      std::cout << m[y][x] << '\t'; 
     } 
     std::cout << '\n'; 
    } 

Назвав его

int main(){ 
    std::vector<std::vector<int>> m{ { 2, 1, 8 }, { 5, 3, 9 }, { 2, 0, 9 } }; 

    print_it(m); 

    return 0; 
} 

Вы получаете желаемый результат:

Medal 0  1  2 
--------------------------------- 
Country1 2  1  8 
Country2 5  3  9 
Country3 2  0  9 

Обратите внимание, что вы можете изменить т в любой массив NXM, как :

std::vector<std::vector<int>> m{ { 2, 5 }, { 9, 5 }, { 10, 15 }, { 0, 2 }, { 5, 7 } }; 
print_it(m); 

для получения:

Medal 0  1 
--------------------------------- 
Country1 2  5 
Country2 9  5 
Country3 10  15 
Country4 0  2 
Country5 5  7 
0

попробовать что-то вроде следующего

#include <iostream> 
#include <iomanip> 
#include <string> 

using namespace std; 

template <class T, size_t M, size_t N> 
std::ostream & display(const T (&a)[M][N], 
         const std::string &header, 
         const std::string &name, 
         std::ostream &os = std::cout) 
{ 
    os << std::setw(name.size() + header.size() + 3); 

    for (size_t i = 0; i < N; i++) 
    { 
     os << header << std::setw(3) << std::left << i + 1; 
     os << ((i + 1) % N == 0 ? '\n' : ' '); 
    } 

    for (size_t i = 0; i < M; i++) 
    { 
     os << name << std::left << i + 1; 
     for (size_t j = 0; j < N; j++) 
     { 
      os << std::setw(header.size() + 3) << std::right << a[i][j]; 
      os << ((j + 1) % N == 0 ? '\n' : ' '); 

     } 
    } 

    os << std::endl; 

    return os; 
} 

int main() 
{ 
    int m[3][3] = 
    { 
     { 2, 1, 8 }, 
     { 5, 3, 9 }, 
     { 2, 0, 9 } 
    }; 


    display(m, "Medal", "Country"); 

    return 0; 
} 

Выход программы

  Medal1 Medal2 Medal3 
Country1  2  1  8 
Country2  5  3  9 
Country3  2  0  9