C ++ 클래스에서 사용자 정의 배열 초기화?

조이 A

기사의 투어 문제에 대해 작업 중이며 클래스를 정의하고 싶지만 사용자가 정의한 배열을 초기화하는 데 문제가 있습니다. 따라서 명령 줄의 사용자 입력 argvs은 체스 판 길이 mX 및 nY입니다. 및 시작 위치 (x, y). 기본적으로 사용자가 정의한 배열을 어떻게 초기화합니까?

첫 번째 질문 : public부분적으로 선언하는 것이 옳 int ** tour습니까?

두 번째 질문 : tour동일한 클래스의 다음 함수에서 배열을 어떻게 참조 합니까?

세 번째 질문 : 에서 사용자가 지정한 차원 배열을 초기화하도록 main호출 K.knight했지만 초기화되지 않았습니다. main함수 사용하여 배열을 초기화 K.knigt()하고 다음 함수에서 배열을 사용할 수있는 방법은 K.knightfunc()무엇입니까?

class Ktour{
public:
    int xSize;              //m 
    int ySize;              //n 
    int ** tour;            //array to be initialized
    int solutionsCount;     //tracking solutions
    int position;           //position count, from 0 to m * n -1

// initialize tour matrix
void knight(int M, int N) {

position = 1;
solutionsCount = 0;

xSize = M;
ySize = N;

tour = new int * [xSize];
for (int i = 0; i < xSize; i++) {
    for (int j = 0; j < ySize; j++) {
        tour[i][j] = 0;
        std::cout << tour[i][j] << std::endl;
        }
    }
}
....some other functions defined in between...
....
.... 
};
...
// main
int main(int argc, char *argv[])
{    
    Ktour K;

    //user inputs chessboard length mX and nY; and a starting position(x,y)

    int mX = atoi(argv[1]);
    int nY = atoi(argv[2]);
    int x = atoi(argv[3]);
    int y = atoi(argv[4]);

    //initialization
    K.knight(mX, nY);  

    //run the recursive function;
    K.knightFunc(x,y);

    return 0;
}
CodeLurker

예, ctor에서 초기화하는 것이 더 논리적으로 보입니다. 내 생각은 int 포인터 배열을 만들고 아직 가리키는 int를 할당하지 않았다는 것입니다.

몇 가지 가능성이 있습니다.

  1. 일반적인 체스 판을 생각한다면 배열 크기가 미리 알려져 있고 특별히 크지 않기 때문에 클래스에서 생성하면됩니다.

    class Ktour{
        ...
        int tour[8][8];
        ...
    }
    

일부 순수 주의자들은 그러한 어레이를 "새로"만 사용해야한다고 말할 수 있습니다. 훨씬 더 큰 배열이라면 확실히해야합니다.

  1. 알 수없는 크기의 배열을 처리하기 위해 수행하려는 작업과 같은보다 간단한 구문은 다음과 같습니다.

    class Ktour{
        ...
        int **tour=0;
    
    
        KTour(int M, int N) {
            tour = new int * [M];
            for (int i=0; i<M; ++i)
                tour[i] = new int [N];
        };
        ~KTour() {
            for (int i=0; i<M; ++i)
                delete [] tour[i];
            delete [] tour;
        };
        ...
    
    }

다음과 같이 아주 간단하게 액세스 할 수 있습니다.

std::cout << tour[i][j];
  1. 위의 코딩 유형은 오류가 발생하기 쉽습니다. 메모리 액세스 오류로 인한 향후 갈등을 줄이려면 실제로 STL 컨테이너 클래스 (또는 Qt를 사용할 때 Boost 클래스 또는 Qt 크기가 너무 제한되지 않은 경우 Qt에서 사용할 수 있지만 Qt에서도 사용할 수 있음)를 사용해야합니다. 예를 들어 중요한 포인터를 덮어 쓰는 대신 배열의 경계를 벗어난 첨자에 액세스 할 때 디버그에서 오류가 발생합니다. 따라서 다음과 같은 것을 사용할 수 있습니다.

    class Ktour{ ... std::vector < std::vector<int> > Tour;

    KTour(int M, int N) {
        // tour.resize(M);    // not needed.
        tour.assign(M, std::vector <int> (N, 0));
    };
    ~KTour() {
        // No need to delete
    };
    ...
    

    }

그리고 당신은

std::cout << tour[i][j];

(참고 : 코드의 추가 줄은 <pre> 및 <code> 태그의 일부 아티팩트입니다. 들여 쓰기 된 모든 줄이 코드로 인식되지 않기 때문에 필요합니다.)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C ++의 클래스 생성자에서 초기화 나열

분류에서Dev

C에서 문자열 배열 정의 및 초기화

분류에서Dev

클래스 내부의 C ++ 정적 상수 배열 초기화

분류에서Dev

C ++에서 사용자 지정 클래스의 네이티브 배열 만들기

분류에서Dev

C # 사용자 지정 클래스 배열에서 사용자 지정 클래스 개체 계산

분류에서Dev

클래스 내에서 비 정적 크기의 배열 사용

분류에서Dev

C ++에서 생성자 (생성자 만)를 사용하여 클래스에서 큰 전용 배열을 초기화하는 방법은 무엇입니까?

분류에서Dev

클래스 C ++에서 2D 배열 초기화

분류에서Dev

디버그 어설 션이 사용자 입력에 의해 클래스 배열을 초기화하지 못함

분류에서Dev

고정 길이로 클래스 배열을 초기화하고 C #에서 동적으로 값 추가

분류에서Dev

C #에서 기본 클래스 및 파생 클래스를 사용하여 배열의 개체 인스턴스화

분류에서Dev

루프없이 C #에서 클래스의 'NotNull'배열을 초기화하는 방법은 무엇입니까?

분류에서Dev

사용자 지정 배열 클래스 : 목록 초기화를위한 생성자

분류에서Dev

사용자 지정 배열 클래스 : 목록 초기화를위한 생성자

분류에서Dev

Angular에서 특정 수의 요소로 클래스 배열 초기화

분류에서Dev

기본 클래스 배열에서 재정의 된 함수 사용

분류에서Dev

C에서 2D 배열의 전체 열 초기화

분류에서Dev

C에서 동적으로 문자열 배열 초기화

분류에서Dev

C #에서 GA를 사용한 시간표 스케줄링을위한 이진 배열의 유전자 초기화

분류에서Dev

클래스의 복사 생성자가 삭제되면 클래스의 배열 멤버 초기화

분류에서Dev

C ++ 클래스의 생성자를 사용하여 char 배열에 기본값 제공

분류에서Dev

C ++ 클래스의 생성자를 사용하여 char 배열에 기본값 제공

분류에서Dev

C ++ 열거 형 클래스-기본 유형에서 초기화

분류에서Dev

C ++에서 사용자 지정 개체 배열의 크기 늘리기

분류에서Dev

다른 클래스의 C ++ 전용 객체 : 초기화 및 해당 클래스의 함수 호출에 사용

분류에서Dev

new [] [] 및 배열의 클래스 초기화 정보

분류에서Dev

시퀀스를 사용한 정적 (멤버) 배열의 우아한 초기화

분류에서Dev

템플릿 클래스 내에서 고정 길이 배열 초기화

분류에서Dev

사용자 정의 초기화 메소드가있는 SKNode 서브 클래스

Related 관련 기사

  1. 1

    C ++의 클래스 생성자에서 초기화 나열

  2. 2

    C에서 문자열 배열 정의 및 초기화

  3. 3

    클래스 내부의 C ++ 정적 상수 배열 초기화

  4. 4

    C ++에서 사용자 지정 클래스의 네이티브 배열 만들기

  5. 5

    C # 사용자 지정 클래스 배열에서 사용자 지정 클래스 개체 계산

  6. 6

    클래스 내에서 비 정적 크기의 배열 사용

  7. 7

    C ++에서 생성자 (생성자 만)를 사용하여 클래스에서 큰 전용 배열을 초기화하는 방법은 무엇입니까?

  8. 8

    클래스 C ++에서 2D 배열 초기화

  9. 9

    디버그 어설 션이 사용자 입력에 의해 클래스 배열을 초기화하지 못함

  10. 10

    고정 길이로 클래스 배열을 초기화하고 C #에서 동적으로 값 추가

  11. 11

    C #에서 기본 클래스 및 파생 클래스를 사용하여 배열의 개체 인스턴스화

  12. 12

    루프없이 C #에서 클래스의 'NotNull'배열을 초기화하는 방법은 무엇입니까?

  13. 13

    사용자 지정 배열 클래스 : 목록 초기화를위한 생성자

  14. 14

    사용자 지정 배열 클래스 : 목록 초기화를위한 생성자

  15. 15

    Angular에서 특정 수의 요소로 클래스 배열 초기화

  16. 16

    기본 클래스 배열에서 재정의 된 함수 사용

  17. 17

    C에서 2D 배열의 전체 열 초기화

  18. 18

    C에서 동적으로 문자열 배열 초기화

  19. 19

    C #에서 GA를 사용한 시간표 스케줄링을위한 이진 배열의 유전자 초기화

  20. 20

    클래스의 복사 생성자가 삭제되면 클래스의 배열 멤버 초기화

  21. 21

    C ++ 클래스의 생성자를 사용하여 char 배열에 기본값 제공

  22. 22

    C ++ 클래스의 생성자를 사용하여 char 배열에 기본값 제공

  23. 23

    C ++ 열거 형 클래스-기본 유형에서 초기화

  24. 24

    C ++에서 사용자 지정 개체 배열의 크기 늘리기

  25. 25

    다른 클래스의 C ++ 전용 객체 : 초기화 및 해당 클래스의 함수 호출에 사용

  26. 26

    new [] [] 및 배열의 클래스 초기화 정보

  27. 27

    시퀀스를 사용한 정적 (멤버) 배열의 우아한 초기화

  28. 28

    템플릿 클래스 내에서 고정 길이 배열 초기화

  29. 29

    사용자 정의 초기화 메소드가있는 SKNode 서브 클래스

뜨겁다태그

보관