2014-04-17 2 views
2

파일 (예 : 2 열 이상의 테이블)을 읽고 각 열을 배열로 반환하는 C++ 함수를 작성하고 싶습니다. 어떻게해야합니까? 그리고 주 프로그램의이 기능에서 어떻게 배열을 읽을 수 있습니까?여러 배열을 반환하는 함수

1 열 (1 배열)이있는 파일에서이 작업을 수행 할 수 있으므로 포인터가 반환됩니다. 하지만 어떻게하면 많은 배열 (또는이 배열에 대한 포인터)을 반환하고 나중에 주 프로그램에서 읽을 수 있습니까?

예 "table.txt"

1 10 
2 20 
3 30 
4 40 
5 50 
+0

2 차원 배열 또는 행렬에서 읽습니다. – bolov

+1

또는'std :: vector' –

+0

왜 배열입니까? 왜 포인터? C++은 더 나은 * stuff (예 :'std :: vector')를 가지고 있습니다. (* : 대부분의 경우에 더 좋으며, 포인터와 배열에도 권리가 있습니다.) – leemes

답변

0

가 호출자의 배열을 선언하고 인수를 통해 전달할.

void fill(int *a, int *b, int *c) { 
    a[0] = b[0] = c[0] = 1; 
    //... 
} 

void func() { 
    int a[10], b[10], c[10]; 
    fill(a, b, c); 
    //... 
} 

또는, 모든 요소 유형으로 구조체를 정의하고 해당 구조체의 단일 배열을 반환 할 수 있습니다.

1

키 값 쌍인 것 같습니다. 가장 좋은 방법은 함수에서 std :: map을 반환하는 것입니다. 파일을 구문 분석 될 수있는 바와 같이,

std::map<int, int> parseFile() 
{ 
} 

당신의 표준 : 맵에 키 값 성병과 같은 쌍 : 쌍을 추가 : 여기처럼 보일 수있는 것입니다.

+1

두 개 이상의 열에서 어떻게 작동합니까? – Veritas

+0

@armanali 질문은 데이터가 2 열 이상일 수있는 테이블임을 지정합니다. – YoungJohn

+0

@Veritas 그러면 벡터의 벡터를 처리 할 수 ​​있습니다. 벡터의 형식은 std :: vector >입니다. – armanali

1

벡터가 포함 된 벡터를 사용할 수 있습니다. 기본적으로 각 행을 적절한 단어로 분리하여 벡터 컨테이너의 해당 열에 적합한 벡터로 푸시하면됩니다.

0

포인터 (C++보다 더 많은 C ... 내 관점) 때문에 동일한 단일 포인터를 반환 할 수 있지만 포인터는 두 개의 배열 포인터를 보유하는 구조체를 가리켜 야합니다. 같은

뭔가 :

typedef struct _two_arrays{ 
/*Assuming it is an array of ints*/ 
int *arr_1; 
int *arr_2; 
}TwoArr; 

TwoArr *yourFunction(/*Argss*/){ 
    TwoArr *arrs = (TwoArr*)malloc(sizeOf(TwoArr)); 
    /*Columns to your arrays ...*/ 
    arrs->arr_1 = yourArr1; 
    arrs->arr_2 = yourArr2; 
    return arrs; 
} 

또는, C++ 방법으로, 당신은 당신이 C++를 처음 사용하는 것을 가정하고 std::vector<std::vector<YOUR_TYPE>>

0

사용할 수 있습니다. 벡터는 배열 대신 사용할 수있는 데이터 구조입니다. 자세한 내용은 [http://www.cplusplus.com/reference/vector/vector/]에서 확인할 수 있습니다.

vector<int> column1,vector<int> column2; 

    if(!loadMatrixFromFile(inputFile,column1,column2)) 
    { 
      cerr << "Uh oh, failed in loading matrix form file" << endl; 
      exit(1); 
    } 

그리고 아래와 같이 함수를 만들 :

를 을 복잡하게하지 않고 많은 두 벡터가 cloumn1 및 2 열은 기본 기능에 (당신이 무한한 크기의 배열로 생각할 수 있습니다) 아래로 loadMatrixFromFile 전화를 선언 할 수
bool loadMatrixFromFile(ifstream & inputFile,vector<int> & col1,vector<int> & col2) 
    { 
     while (inputFile) 
     { 
      string line; 
      getline(inputFile,line); 

        int n; 
        stringstream tempLine(line); 
        for (int i=0;i<2;i++) 
        { 
          tempLine>>n; 
          if (i==0) 
           col1.push_back(n); 
      else 
       col2.push_back(n); 
        } 
     } 
    return true; 
    } 

벡터를 실행 한 후 벡터 column1, column2에는 파일의 열 값이 포함됩니다.

벡터를 사용하는 것이 편한 경우 각 열에 대해 하나의 벡터를 선언하는 대신 배열의 배열과 같이 벡터 벡터를 사용하여 각 열의 벡터를 포함 할 수있는 벡터를 만들 수 있습니다.

관련 문제