190702-1 - 메모리활용
교육을 받으면서 노트필기 했던 내용을 날것 그대로 업로드합니다.
● new 로 동적 배열 할당 해보기
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
int main() {
int row = 3;
int col = 4; // input
int** p = new int* [row];
//int** p = (int**)malloc(sizeof(int*) * row);
for (int i = 0; i < row; ++i) {
p[i] = new int[col];
}
for (int i = 0; i < row; ++i)
for (int j = 0; j < col; ++j)
p[i][j] = (i * 3 + j + 1) * 10;
printf("%d %d %d\n", p[0][0], p[0][1], p[0][2]);
printf("%d %d %d\n", p[1][0], p[1][1], p[1][2]);
for (int i = 0; i < row; ++i) {
delete[] p[i];
}
delete[] p;
}
new,delete
new[],delete : 내부적으로 할당 크기까지 저장한다.
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
int main() {
int row = 3;
int col = 4;
vector<vector<int>> v(row);
for (int i = 0; i < row; ++i) {
v[i].resize(col);
}
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
v[i][j] = (i * col + j + 1) * 10;
}
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf("%d ", v[i][j]);
}
printf("\n");
}
}
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
int main() {
int row = 3;
int col = 4;
vector<vector<int>*> v(row); // 벡터의 주소를 원소로 갖는다.
for (int i = 0; i < row; ++i) {
v[i] = new vector<int>(col);
}
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
(*v[i])[j] = (i * col + j + 1) * 10;
}
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf("%d ", (*v[i])[j]);
}
printf("\n");
}
for (int i = 0; i < row; i++)
{
delete v[i];
}
}
● 연산자 중복 활용
● 참조자를 활용
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
int main() {
int row = 3;
int col = 4;
vector<vector<int>*> v(row); // 벡터의 주소를 원소로 갖는다.
for (int i = 0; i < row; ++i) {
v[i] = new vector<int>(col);
}
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
vector<int>& arr = (*v[i]);
arr[j] = (i * col + j + 1) * 10;
}
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
vector<int>& arr = (*v[i]);
printf("%d ", arr[j]);
}
printf("\n");
}
for (int i = 0; i < row; i++)
{
delete v[i];
}
}
● 원할 때 마다 new로 할당할 수 있다는 장점이 있다.
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
class Image {
//vector<vector<int>*> v/*(row)*/; // 초기화 불가 -> 생성자에서만 가능
vector<vector<int>*>* pv; // 그래서 보통 포인터를 주어 초기화 하는 형태로 사용
};
int main() {
int row = 3;
int col = 4;
// 객체를 실시간으로 만들어 낼 수 있는 효율적인 코드를 작성할 수 있다.
vector<vector<int>*>* pv;
pv = new vector < vector<int>*>(row);
for (int i = 0; i < row; ++i) {
(*pv)[i] = new vector<int>(col);
}
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
vector<int>& arr = *(*pv)[i];
arr[j] = (i * col + j + 1) * 10;
}
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
vector<int>& arr = *(*pv)[i];
printf("%d ", arr[j]);
}
printf("\n");
}
for (int i = 0; i < row; i++)
{
delete (*pv)[i];
}
delete pv;
}
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
class Image {
//vector<vector<int>*> v/*(row)*/; // 초기화 불가 -> 생성자에서만 가능
vector<vector<int>*>* pv; // 그래서 보통 포인터를 주어 초기화 하는 형태로 사용
//생성전까지는 할당하고 싶지 않을 때. 불필요한 메모리 낭비를 없앤다.
};
int main() {
int row = 3;
int col = 4;
// 객체를 실시간으로 만들어 낼 수 있는 효율적인 코드를 작성할 수 있다.
vector<vector<int>>* pv;
pv = new vector <vector<int>>(row);
for (int i = 0; i < row; ++i) {
(*pv)[i].resize(col);
}
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
(*pv)[i][j] = (i * col + j + 1) * 10;
}
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf("%d ", (*pv)[i][j]);
}
printf("\n");
}
delete pv;
}
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
class Image {
//vector<vector<int>*> v/*(row)*/; // 초기화 불가 -> 생성자에서만 가능
vector<vector<int>*>* pv; // 그래서 보통 포인터를 주어 초기화 하는 형태로 사용
//생성전까지는 할당하고 싶지 않을 때. 불필요한 메모리 낭비를 없앤다.
};
int main() {
int row = 3;
int col = 4;
// 객체를 실시간으로 만들어 낼 수 있는 효율적인 코드를 작성할 수 있다.
vector<vector<int>>* pv;
pv = new vector <vector<int>>(row);
for (int i = 0; i < row; ++i) {
vector<vector<int>>& v = (*pv); // 객체의 참조를 사용.
// 이런 형태를 많이 사용한다.
v[i].resize(col);
}
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
vector<vector<int>>& v = (*pv);
v[i][j] = (i * col + j + 1) * 10;
}
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
vector<vector<int>>& v = (*pv);
printf("%d ", v[i][j]);
}
printf("\n");
}
delete pv;
}
'c언어 > c++' 카테고리의 다른 글
[c++] vector 정렬시(class, struct) 직접 만든 함수로 비교하기 (sort) (0) | 2020.03.25 |
---|---|
[c++] CStdioFile과 sscanf_s로 파일 읽어오기 (형식으로 불러오기) (0) | 2020.03.24 |
[c++] 동적으로 배열 할당하여 사용하기 (new, 포인터) (0) | 2019.07.03 |
[STL] Template, 시퀀스 사용 등 (0) | 2019.07.02 |
[c++/cpp] 연산자 오버로딩, 복사생성자, 템플릿(T) 등 (0) | 2019.07.01 |