khaledce Ответов: 1

Как перебирать 2D массив и передавать каждую пару в функцию?


У меня есть матрица, сохраненная в файле .txt, она имеет значения, я создал функцию, которая принимает строку и число в качестве параметров, а затем возвращает значение, полученное из matrix.txt файл.
У меня есть 2D-массив, содержащий пары строк/столбцов, они не упорядочены и являются случайными парами,как я могу перебирать этот 2D-массив и передавать каждую пару в функцию getList(rw, cl), чтобы получить такой файл в качестве результата.

result.txt
строка,столбец,его значение
строка,столбец,его значение
и т.д.

Спасибо за любую помощь, обратите внимание, пожалуйста, что я все еще новичок, так что никаких авансов советы

Что я уже пробовал:

#include<iostream>
#include<fstream>
#include<string>

using namespace std;

const int col_nbr = 7;
const int row_nbr = 3;

int static getValueOf[col_nbr][row_nbr];      
    
void loadMatrix(){

int x, y;


ifstream in("/storage/emulated/0/matrix.txt");

//This my matrix .txt file saved in pc    
/*        
11 12 13 14 15 16 17
21 22 23 24 25 26 27
31 32 33 34 35 36 37
*/      
        
        
        

if (!in){
    cout << "Cannot open file.\n";
    return;
}

  for (x = 0; x < row_nbr; x++){       
     for (y = 0; y < col_nbr; y++){
            
       in >> getValueOf[x][y];
       }
        }

in.close();
}

int getList(int rw,int cl){

return getValueOf[rw-1][cl-1];
}


int main(){

loadMatrix();

//I would take each pair row/columm from this 2D array coords, then I pass the row and the columm to the function getList(rw,cl) to get a list of the coorespondent values from the matrix.txt

int coords [4][2] = {{3,0},{2,1},{6,2},{1,1}};
//int coords has 4 rows and 2 columms
  

    cout<<getList(1,1)<<endl;  //11
    cout<<getList(3,7)<<endl;  //37
    
    
   

return 0;
}

Mohibur Rashid

Я сейчас немного скептически настроен. Вы можете создать вложенный цикл для чтения из файла, но не можете создать один цикл?

Patrice T

не ясно!
дайте подробную информацию о проблеме.

khaledce

@ppoymorphe, хорошо, тогда давайте на мгновение забудем все вышесказанное и скажем, что у нас есть функция getList(row,columm), она возвращает значение singe int; и 2D-массив в файле .cpp, он имеет 4 пары пар row/column.
Как перебирать getList(строку,столбец) через два вложенных for-цикла над 2D-массивом, чтобы получить соответствующие значения для этих пар, которые будут сохранены в новом 1D-массиве или во внешнем файле, не имеет значения

1 Ответов

Рейтинг:
1

CPallini

А как насчет отказа от глобальных переменных и использования современных C++ особенности и библиотека?
(передайте свой файл данных как stdin, используя перенаправление ввода).

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <array>
using namespace std;

using Matrix = vector < vector <int > >;

int main()
{
  Matrix m;
  string line;
  while ( getline( cin, line) )
  {
    vector <int> row;
    istringstream iss(line);
    while ( iss )
    {
      int i;
      iss >> i;
      row.push_back(i);
    }
    m.push_back( row );
  }

  array< array <int, 2>, 4> arr{{{3,0},{2,1},{6,2},{1,1}}};

  for ( const auto & a : arr)
  {
    int r = a[1]; // it looks there is some confusion on 'rows' and 'columns' interpretation...
    int c = a[0];
    cout << "M[" << r << "," << c << "]= " << m[r][c] << "\n";
  }
}