1

처음 두 차원 고정되어있는 3 차원 벡터를 정의하고 싶습니다 있지만 세 번째 벡터를 동적으로 채울 싶습니다. 함수는 루프 내부에서 호출됩니다. 내가3 차원 벡터 C++에서 - 함수에 전달하기 전에 크기의 부분 정의

void fun(vector<vector<vector<double> > >& foo){ 
    for(int j1=0; j1<NUM; j1++){ 
     for(int j2=j1+1; j2<NUM; j2++){ 
      if(<condition>){ 
        foo[j1][j2].push_back(<value>); 
      } 
     } 
    } 
} 

I로 함수 재미를 선언

#define NUM 6 

vector<vector<vector<double> > > foo; 

foo.resize(NUM); 
for(int j1=0; j1 < NUM; j1++){ 
    foo[j1].resize(NUM); 
} 

while(<condition>){ 
    fun(foo); 
} 

:이 수 여부,하지만 내가 좋아하는 뭔가 어쨌든 그것을 구현하는 시도 여부를 완전히 확실하지 않다

처음에는 NUM = 5로 테스트했는데 모든 것이 잘 보였지만 6으로 변경하려고 시도했을 때 세그멘테이션 오류가 발생했습니다.

push_back을 사용하여 3 차원을 채우지 않더라도 (즉 push_back 행에 주석을 달았습니다.) foo가 인수로 사용되는 함수에 대한 간단한 호출은 I는 while 루프에서

cout << foo.size() << endl; 

를 넣으면 푸 즉 I는 첫번째 반복 이후 푸 변화의 크기는, 난수를 NUM에서 변경하는 것이 참조된다.

나는 Linux 우분투에서 오류가 발생하지만 MacOSX에서는 오류가 발생하므로 플랫폼에 따라 다르다는 것을 발견했습니다. 그래서 나는 메모리 할당과 관련하여 정말 잘못된 것을하고 있다고 생각하지만 정확히 무엇을 모르는 것인가. 누군가 나에게 설명 할 수 있을까요?

도움 주셔서 감사합니다.
그렇게 foo[j1] 아직 그냥 쓰레기입니다 ..

+1

전체 루프를 주석 처리하고'fun'에서'cout << foo.size()'를 시도하면 어떻게됩니까? 또한 호출 함수에서'while ()'에 사용한 정확한 조건을 게시 할 수 있습니까? 그리고 NUM을'5'에서'6'으로 변경 한 후에 모든 것을 재 컴파일했습니다 (즉, 어떤 코드는'NUM'을'5 '로 컴파일하고 다른 코드는'NUM'을'6'으로 컴파일합니다). – Naveen

+1

문제가있는 간단한 독립 실행 형 예제가 있습니까? 당신의 코드는 ('재미 '의 내부 루프를 제외하고 - 나는 의도적이라고 가정한다.) 괜찮아 보인다. – Nim

+1

이 코드는 게시 할 때 유효해야합니다. SSCCE를 게시해야합니다. – Puppy

답변

0
foo.resize(NUM); 
for(int j1=0; j1 < NUM; j1++){ 
    foo[j1].resize(NUM); 
} 

여기 당신은 foo[j1] 크기를 조정하고 있지만 foo[j1] 아무것도 아직 없다.

+0

이 부분을 확인하지 않아야합니까? 내가 이미 알고있는 두 가지 차원을 또 어떻게 선언 할 수 있습니까? – Giulia

+3

no..its not ..'foo.resize (NUM)'는'NUM' 디폴트 벡터를 생성 할 것이므로'foo [j1]'은 완전히 유효합니다. – Naveen

+0

oops ~ missed it ... 괜찮을 것입니다. – ravi

1

실제로 요소의 수와 채우기의 사본을 만드는 데 사용할 요소를 인수로 취하는 벡터 생성자를 사용하여 원하는 크기의 2D 행렬로 고정 된 숫자 크기의 3D 행렬을 만들 수 있습니다 벡터에서. 다음과 같이 보일 것입니다 :

#include <iostream> 
#include <vector> 

int main() { 
    const size_t NUM = 6; 
    std::vector< std::vector< std::vector<double> > > Matr(NUM, std::vector< std::vector<double> >(NUM, std::vector<double>())); 
    std::cout << "num 2D matrices - " << Matr.size() << std::endl; 
    for(size_t j1 = 0; j1 < Matr.size(); ++j1){ 
     std::cout << "num rows - " << Matr[j1].size() << std::endl; 
     for(size_t j2 = 0; j2 < Matr[j1].size(); ++j2) { 
      Matr[j1][j2].push_back(0.09l); 
      std::cout << "num columns - " << Matr[j1][j2].size() << " "; 
     } 
     std::cout << std::endl; 
    } 
    return 0; 
}