memory는 lvalue, elem, func_pointer, vector

2020. 10. 2. 23:01데일리/오늘

@1. 각 depth의 변수의 memory는 lvalue이다.

즉 depth-1,

int x = 3;
의 memory는 lvalue이다.

depth-2

int *px = &x;
의 &(px) 는 lvalue이다.

@2. elem

elem구문은 java에서도 for each문으로 한번 보인 바 있다.

String button[] = {"하나","둘","셋"};
for(String str : button)
{
System.out.println(str);
}

이는 array의 완료 지점을 암묵적으로 처리하는 방안으로,

 

완료 조건이 불분명할 때 시도해 볼 만한 방법이다. 

 

C++에서 시도했던 방법

for(double& elem : vector) // vector[0~size-1] = &elem 과 같은 표현이다 중요!!!
{
    cin >> elem;
}

#1. double& elem : vector는 아름다운 방법이다.

 

왜 reference를 사용했는지를 이해해야한다. 즉, array의 각 값을 for라는 함수 내에서 transform 시키고 싶을 때 생각해 볼 법하다.

 

#2. 함수 내에서 선언된 지역변수 참조자는 해당 함수가 끝나면 자동으로 메모리가 해제되며,

 

이 메모리의 해제가 원본을 해치지 않는다.  왜...? 왜지?

 

애초에 전제가 잘못되었다. reference는 메모리를 차지하지 않는다. 

 

#3. 이러한 방법은 Top-down 코딩 방식에도 이용될 것이라 생각된다.

 

뭔지 모르지만 내가 각 vector를 elem이라고 명명할 거야, 근데 이걸 변화시킬 거야.라는 생각은 Down-Top 방식의 코딩은 확실히 아니다.

 

#4. elem이라는 하나의 블럭이 vector라는 여러 블럭을 모두 지칭한다고 생각하자. (생각의 문제)

 

@3. function에도 pointer가 존재할 수 있다

#1. 그저 임의 함수를 지정하고 싶을 뿐,

 

임의함수는 다음과 같이 선언

int (*func)(int,int);
argument로는 함수 이름을 그냥 보내면 된다.

evaluate(add,2,3);
parameter로는 그대로 임의함수 원형을 받아야한다.
int function(int (*func)(int,int),int x, int y);

 

@4. Vector

#1. 선언

#include <vector>
using namespace std;
vector<int> vec;

#2. 초기화

 

$1. Value를 초기화 함으로써, Size를 암묵적으로 초기화

vector<int> vec = {1,2,3};

$2. Size만 초기화

vector<int> vec(10);

#3. Array 사용법보다 좋은 점.

 

push_back과 pop_back의 존재 여부

 

array는 사이즈를 늘리고 싶을 경우, 우리가 새로 메모리를 할당해야 했는데, push_back과 pop_back의 존재가 매우 편하다.

'데일리 > 오늘' 카테고리의 다른 글

인코딩(임시)  (0) 2020.10.17
C++  (0) 2020.10.07
static 변수의 선언은  (0) 2020.09.12
소스 코드 정렬 키  (0) 2020.09.11
왜 포인터를 안쓰지  (0) 2020.09.10