new 연산자를 사용하여 다음 코드를 작성하는 방법은 무엇입니까? 자세히 설명해주십시오. 미리 감사드립니다. malloc을 new로 변환
#include<alloc>
#define MAXROW 3
#define MAXCOL 5
using namespace std;
int main()
{
int (*p)[MAXCOL];
p = (int(*)[MAXCOL])malloc(MAXROW*sizeof(*p));
}
new 연산자를 사용하여 다음 코드를 작성하는 방법은 무엇입니까? 자세히 설명해주십시오. 미리 감사드립니다. malloc을 new로 변환
#include<alloc>
#define MAXROW 3
#define MAXCOL 5
using namespace std;
int main()
{
int (*p)[MAXCOL];
p = (int(*)[MAXCOL])malloc(MAXROW*sizeof(*p));
}
를 사용할 필요가 new[]
경우 new
은 int(*)[MAXCOL]
- 2D 배열 소멸과 동일한 유형을 반환합니다. delete[] p;
을 잊지 마세요.
마지막 부분은 std::vector
의 중요성을 불러옵니다. 아마도 컴파일 타임에 두 번째 차원의 크기를 알 수있을 것입니다.따라서 std::vector<std::array<int, MAXCOL>>
은 delete[]
문을 필요로하지 않는 추가 보너스와 함께 작동하며 크기 (MAXROW)를 알고 있습니다. 가능하다면 이것을 사용하십시오.
실제로 예제에서 두 차원 모두 컴파일시 알려 지므로 std::array<std::array<int, MAXCOL>, MAXROW>
도 여기에서 작동합니다. 일반적으로 동적 할당보다 바람직합니다.
컴파일 타임에 어느 차원도 알려지지 않은 경우 모든 내부 벡터가 같은 크기임을 알면 성능을 높이기 위해 벡터 또는 전용 행렬 클래스의 벡터가 가장 좋습니다.
”
방법 new 연산자를 사용하여 다음과 같은 코드를 작성하는 문자 질문?
& hellip; 당신이 생각하는 것 이상을 의미합니다.
new
new
연산자 제외한 C의
malloc
대략 유사한 간단한 직접 할당 함수 인 사용자 정의 중 하나에 의해 대체 가능하다.
당신은 아마 new
표현을 의미한다. 이 표현식은 할당을 위해 new
연산자를 호출하고 및은 할당 된 것이 클래스 유형 인 경우 초기화를 위해 생성자를 호출합니다. 그리고 타입 안전합니다.
하지만 해당 어레이는 그 중 하나를하지 싶지만, 표준 라이브러리에서 간단하게 std::vector
.
#include <vector>
using namespace std;
auto main()
-> int
{
int const n_rows = 3;
int const n_cols = 5;
using Row = vector<int>;
vector<Row> v(n_rows, Row(n_cols));
// E.g. v[1] is a row, and v[1][2] is an int item in that row.
}
이
당신이 너무 자주 행렬을 사용하지 않는 경우에도, 포장하는 좋은 아이디어가 될 수 있습니다
여기 매트릭스를 생성하는 벡터의 std::vector
를 사용하는 예제입니다 클래스에서 행렬의 일반적인 개념. 간단한 방법은 저장 용으로 하나의 std::vector
을 사용하는 것입니다. at
함수 또는 클라이언트 코드에서 인덱싱을위한 operator()
입니다. 아직 직접하고 싶지 않다면 예를 들어 Boost 라이브러리는 행렬 클래스를 제공합니다. 이 이후
일반적으로 객체와 같은 N-dim 배열에 중첩 벡터를 사용하지 않습니다. 느려지는 요소에 액세스하기위한 여러 개의 회귀가 있습니다. – doug
@doug : 동의합니다. 그래서 매트릭스 스토리지로 단일 벡터를 사용하는 것이 좋습니다. 간단한 선언이 중첩 된 이유입니다. 고정밀. :)) –
단일 벡터를 사용하고 여전히 2D 내장 배열의 의미를 사용하는 아주 간단한 방법이 있습니다. (http://stackoverflow.com/questions/36123452/statically-declared-2-d-array-c-as-data-member-of-a-class/36123944#36123944) – doug
는 C++ 내가 std::array
또한 std::unique_ptr
당신이 delete
를 사용할 필요가 new
사용하는 경우, free
않은 ALLOC 또는 무료 메모리를 사용한다 malloc
을 사용하여 권 해드립니다 것이다; 와 평소처럼, 이것은 자유 스토어와의 2 차원 배열 (MAXCOL에 의해 MAXROW)를 할당
p = new int[MAXROW][MAXCOL];
: 당신은 당신이 말 그대로 질문에 대답, 아주 간단하게 delete[]
#include <cstdlib>
#include <memory>
#include <array>
#define MAXROW 3
#define MAXCOL 5
using namespace std;
int main()
{
int (*p)[MAXCOL];
p = (int(*)[MAXCOL])malloc(MAXROW*sizeof(*p));
free(p); //free memory
array<int,MAXCOL> *p1 = new array<int,MAXCOL>[MAXROW];
delete []p1; //use this to delete the variable
array<array<int,MAXCOL>,MAXROW> *p2 = new array<array<int,MAXCOL>,MAXROW>;
delete p2; // normal delete for this one
auto p3 = make_unique<array<array<int,MAXCOL>,MAXROW>>();
//no delete needed for p3, it is a smart pointer.
}
''은 표준 헤더가 아닙니다. 'malloc'은''을 사용하십시오. –
chris