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 |