은 내가 C++ 작성한 이후 오랜만, 그래서 나는이 제대로하고있어 확인하고 싶습니다 :컨테이너에 요소를 추가하는 올바른 방법입니까?
vector<Mat>
VideoHash::dct3d(vector<Mat> cube)
{
vector<Mat> dctPlanes;
for (int k = 0; k < TEMPORAL_DIM; ++k)
{
Mat spatial;
Mat freq;
cube[k].convertTo(spatial, CV_64F);
dct(spatial, freq);
dctPlanes.push_back(freq);
}
// Do other stuff here
}
나는 함수에 대한 입력으로 행렬의 벡터를 가지고있다. 벡터의 각 행렬에 대해 다른 데이터 유형 (double)으로 변환하고 변환 결과에 DCT를 수행 한 다음 DCT 결과를 다른 벡터에 저장합니다.
이게 맞습니까? for 루프 내부에서 생성되는 행렬에 대한 의문을 가지고 있습니다. 루프가 종료되면 범위를 벗어납니다. 스택의 해당 행렬에 할당 된 메모리는 어떻게됩니까? 루프 이후에도 계속 메모리에 액세스 할 수 있습니까 (예 : '여기 다른 항목 수행'섹션).
성능 문제와 관련하여 추가하고 싶습니다. 이동 생성자는 Mat 클래스가 동적으로 메모리를 할당하는 경우에만 성능을 향상시킵니다. 이 작업을 수행하는 행렬 클래스를 기억하지 못하기 때문에 성능 향상에 도움이 될 수 있습니다. 행렬 클래스의 경우 일반적으로 이동 생성자를 구현하는 의미있는 방법이 없습니다. – mbgda
행렬이 임의의 차원 인 경우 일반적으로'size' 필드와 행렬에 동적으로 할당 된 내용에 대한 포인터가 있습니다. 이동 생성자는 얕은 스왑을 수행합니다. DCT는 일반적으로 큰 행렬 (예 : 이미지)에서 이루어지기 때문에이 특별한 경우에는 실제로 그럴 것이라고 기대합니다. – CygnusX1
아, 아주 좋은 지적입니다. 나는 단순한 매트릭스가 아니라는 사실을 완전히 읽었습니다. 이 경우 성능이 확실히 향상됩니다. – mbgda