하이 C++ 다차원 벡터
방법a[0][1]=98;
a[0][2]=95;
a[0][3]=99;
a[0][4]=910;
a[1][0]=98;
a[1][1]=989;
a[1][2]=981;
a[1][3]=987;
방법 벡터에서 동일한 작업을 수행 차원 배열과 같은 곳에서 2D 벡터를 만들 수? 미리 감사드립니다. 시스템이 모든 내부 벡터는 크기가 같고 보장되지 않으므로 성장 행렬이 사용
는하이 C++ 다차원 벡터
방법a[0][1]=98;
a[0][2]=95;
a[0][3]=99;
a[0][4]=910;
a[1][0]=98;
a[1][1]=989;
a[1][2]=981;
a[1][3]=987;
방법 벡터에서 동일한 작업을 수행 차원 배열과 같은 곳에서 2D 벡터를 만들 수? 미리 감사드립니다. 시스템이 모든 내부 벡터는 크기가 같고 보장되지 않으므로 성장 행렬이 사용
는std::vector< std::vector<int> > a; // as Ari pointed
, 복잡해질 수 있습니다. 두 번째 차원에서 성장할 때마다 모든 벡터를 명시 적으로 늘려야합니다.
// grow twice in the first dimension
a.push_back(vector<int>());
a.push_back(vector<int>());
a[0].push_back(5); // a[0].size() == 1, a[1].size()==0
괜찮 으면 (사실 매트릭스가 아니라 벡터의 벡터가 아닙니다.) 괜찮을 것입니다. 그렇지 않으면 모든 벡터에서 두 번째 차원을 안정적으로 유지하는 데 특별한주의를 기울여야합니다.
고정 크기의 행렬을 사용하려는 경우 클래스에 캡슐화하고 double 배열 구문을 제공하는 대신 operator()를 재정의하는 것을 고려해야합니다. 이 here
FAQ Lite 링크는 현재 [here] (http://www.parashift.com/c++-faq/matrix-array-of-array.html)입니다. – sumodds
std::vector< std::vector<int> > a;
//m * n is the size of the matrix
int m = 2, n = 4;
//Grow rows by m
a.resize(m);
for(int i = 0 ; i < m ; ++i)
{
//Grow Columns by n
a[i].resize(n);
}
//Now you have matrix m*n with default values
//you can use the Matrix, now
a[1][0]=98;
a[1][1]=989;
a[1][2]=981;
a[1][3]=987;
//OR
for(i = 0 ; i < m ; ++i)
{
for(int j = 0 ; j < n ; ++j)
{ //modify matrix
int x = a[i][j];
}
}
dribeas '제안에 관한 C++ FAQ를 읽고 정말 길을 가야하는 것입니다.
operator() 경로로 이동하려는 이유를 설명하면 데이터가 희박한 경우 내부적으로 공간을 절약하기 위해 다르게 배치 할 수 있으며 operator()는 내부 구현 문제를 다음과 같이 숨 깁니다. 최종 사용자가보다 나은 캡슐화를 제공하고 인터페이스를 깨지 않고 나중에 내부 레이아웃의 공간 또는 속도를 향상시킬 수 있습니다.
에 벡터를 사용하는이없는 경우 Boost.Multi_array을 시도 할 수 있습니다. 간단한 예를 들면 link입니다.
아리가 지적한대로 벡터 < 벡터 < int >>가 올바른 방법입니다.
그 외에도 복잡한 STL 구조는 어색하고 혼란스러워지기 때문에 그러한 경우에는 항상 내부 벡터를 실제로 클래스로 래핑하는 것을 고려합니다.
2 차원 벡터를 사용하려면 다음 방법을 사용하십시오.
int rows, columns; // . . . vector < vector <int> > Matrix(rows, vector<int>(columns,0)); Or vector < vector <int> > Matrix; Matrix.assign(rows, vector <int>(columns, 0)); // Do your stuff here...
이 * 컬럼 크기 행의 행렬을 생성하고 우리 생성자 즉 벡터 < INT> (열 번째 인수로서 (0) 0을 통과하기 때문에 제로로 초기화한다, 0).
중복 :? _stackoverflow.com/questions/741190/multi-dimensional-array-c – lothar
나는 그것이 _exact_ 중복이라고 생각하지 않습니다. 이 질문은 벡터의 벡터를 사용하고 원시 메모리를 사용하지 않는 것에 대한 내용입니다. –