1. This is the one of the songs I've heard.
  2. I have seen this movie.
  3. I haven't seen the movie yet.
  4. I've decided to change.
  5. I had no idea what I was doing.
  6. I want to ask you something

내가 초창기 VTM 소스코드를 분석할 때, c++에서 주로 사용하는 vector에 대한 개념이 없어서 고생했던 기억이 있다.

정말 별거 없는 내용이지만, 추후 다시 remind도 할 겸 vector와 관련된 내용을 정리해본다.

 

c++에서 vector란 배열과 비슷한 역할을 하고 있다.

하지만 vector는 배열의 맨 앞과 뒷부분을 제거하는데에 효율적이며, 배열보다 계산속도가 빠르다는 장점이 있어서 Video codec에서 매우 애용하는 문법이다.

다만, index 기반 접근도 가능하지만 비효율적이므로 이 경우에는 vector를 사용하지 않는다.

 

vector를 선언하는 방법
  • vector<int> name;
    - 비어있는 vector를 생성한다.
  • vector<int> name(3);
    - 0으로 초기화 된 3개의 원소를 갖는 vector를 생성한다.
  • vector<int> name(3,5);
    - 5로 초기화 된 3개의 원소를 갖는 vector를 생성한다.
  • vector<int> name1(name2);
    - name1에 name2를 복사하여 생성한다.
vector의 맴버 함수들
  • name.at(idx);
    - idx번째 원소를 참조
  • name[idx];
    - idx번째 원소를 참조
  • name.front();
    - 첫번째 원소를 참조
  • name.back();
    - 마지막 원소를 참조
  • name.clear();
    - 모든 원소를 제거함
    - size만 제거되고 capacity는 변경사항 없음
  • name.push_back(3);
    - 마지막 원소 뒤에 원소 3을 삽입함
  • name.pop_back();
    - 마지막 원소를 제거함
  • name.begin();
    - 첫번째 원소를 가리킴
  • name.end();
    - 마지막의 다음번째를 가리킴
  • name.size();
    - 원소의 개수를 리턴함
  • name.capacity()
    - 할당된 공간의 크기를 리턴함
  • name1.swap(name2);
    - name2와 name1의 원소의 capacity를 바꿔줌. (모든 값을 바꿔줌)
  • name.insert(2,3,4);
    - 2번째 위치에 3개의 공간을 추가하여 4를 삽입함. (뒤에값들은 뒤로 밀림)
  • name.insert(2,3);
    - 2번재 위치에 3의 값을 삽입함
  • name.erase(x);
    - x가 가리키는 원소를 제거함
    - size만 줄고, capacity(할당된 메모리)는 그대로 남게됨
  • name.empty();
    - vector가 비어있다면 true 값을 리턴함
    - 비어있다는 기준은 size가 0이라는 의미이며, capacity와는 상관이 없음
vector의 특징: size와 capacity와의 관계

vector는 capacity로 메모리가 할당되어 있으며, 그 안에 초기화된 값들의 개수인 size로 구성되어 있다.

 

 

'개인공부 > C언어' 카테고리의 다른 글

클래스 객체 인스턴스  (0) 2022.02.03
import sys

inputName = sys.argv[1] # input 1: SHVC 결과 txt 파일명
outputName = sys.argv[2] # input 2: 결과 출력으로 사용할 txt 파일명

txtFile = open(inputName, mode='r') # input 파일의 이름, mode='r'을 통해 파일을 읽음
txtFileWrite = open(outputName,mode='a') # output 파일의 이름, mode='a'를 통해 결과를 누적함

txtFileWrite.write('\n')

t = 0 # line 인덱스 정보 저장
p = -100
while True:
    line = txtFile.readline() # line에는 while문을 통해 input 파일의 1줄 부터 차례로 읽음
   
    if not line: # line이 없으면 while문 탈출
        break

    if line.find('SUMMARY') != -1 : # txt 파일 마지막에 있는 SUMMARY 위치 읽음
        p = t

    if t == p+2 or t == p+3 : # SUMMARY 다음줄과 그 다음줄을 읽고 출력함
        txtFileWrite.write(line.split()[3]+'\t'+line.split()[4] +'\t'+line.split()[5]+'\t'+line.split()[6]+'\t')
       
    t=t+1 # 현재의 line 인덱스


txtFileWrite.close()

나의 최근 90일 경기 중 백으로 Ruy Lopez로 게임을 진행할 경우, 19 경기 중 13경기는 패배하였다.

이렇게 처참한 승률을 보이는 이유를 파악하기 위해 나의 기보를 하나씩 분석해본다.

 

아래 포지션은 내가 어떤 방향으로 게임을 풀어가야할지 몰라 고민을 많이 했던 포지션이고, 굉장히 자주 나왔던 포지션으로 기억한다.

나 (1339) vs. daXXX (1384)

이 포지션에서 나의 장단점을 직관적으로 말해보자면 아래와 같다.

장점 1. 킹편 폰의 우세가 있다.

장점 2. 흑에 비해 공격적으로 기물이 놓여져 있다.

장점 3. 어두운칸 비숍이 흑에 비해 자유롭게 전개할 수 있다.

 

단점 1. 퀸편 폰의 열세에 있다.

 

나의 장점을 활용하여 계획을 세워본다면,

1. 킹편 폰의 우세를 활용해 중앙을 견고하게 유지하면서 킹편 폰 스톰을 진행할 수 있다.

2. 1번을 위해 퀸편 캐슬링을 준비한다.

 

그리고 단점을 상쇄하기 위해서는,

1. 중앙의 강점을 살려 Nd5를 갈 수 있도록 준비한다. (중앙을 차지하면 사이드 공격이 약해질 것이다.)

 

위의 장단점을 기반으로 한 계획을 수행하기 위해서 내가 피해야하는 수가 있다.

 

Bxc6: 흑의 나이트를 잡으면서 이중폰을 만들어 약점을 구성하는 것처럼 보이지만, c6의 폰으로 인해 c3의 나이트가 너무 약해지고 b파일이 열리게 되면서 퀸편 캐슬링이 어려워진다. 그렇게 된다면 킹편 폰 스톰 계획이 너무 위험해지게 된다.

c6의 폰은 심지어 중앙에 영향력을 행사하여 이중폰이라는 단점을 상쇄하는 특이한 폰이라고 생각된다.

O-O: 백의 강점은 킹편 폰 우세인데, 킹편 캐슬링은 킹편 폰 우세를 잘 활용하기 어려운 포지션이라고 생각된다.

Nf5: 흑의 밝은 색 비숍을 교환하겠다는 목적이지만, 백의 중앙 컨트롤이 없어지게 되고 이중폰이 생기게 된다. 심지이 f파일의 이중폰은 ...Nc6로 인해 너무 무력해지게 된다. 심지어 흑의 캐슬링이 진행되지 않았기 때문에 너무 섣부른 움직임이라고 생각된다.

 

그래서 나는 아마 다음에 이와 같은 포지션이 나온다면 아래와 같이 진행할 계획이다.

Be3 -> Qe2 를 두면서 상대 킹의 캐슬링 위치를 파악할 것이다.

1. 흑의 캐슬링과 반대편 캐슬링을 할 수도 있고

2. Nd5로 중앙 확장과

3. 흑의 캐슬링 위치에 따른 적절한 폰 스톰이 가능할 것

으로 진행하면 좋을 것이라고 생각된다.

 

어쨋든 위의 포지션은 백이 유연한 수를 둘 수 있는 가능성이 좀 더 많은 포지션인 것 같다.

 

참고로 위의 게임은 아래와 같이 진행되었으니 참고바란다.

1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Bc5 5. Re1 d6 6. c3 O-O 7. d4 Bb6 8. h3 a6
9. Ba4 Bd7 10. Bxc6 Bxc6 11. d5 Bd7 12. Bg5 Qc8 13. Bxf6 gxf6 14. Kh2 Bxf2 15.
Rf1 Bb6 16. Nh4 Qd8 17. Qh5 Be3 18. Rf3 Bf4+ 19. g3 Bg5 20. Nf5 Bxf5 21. Rxf5
Kh8 22. h4 Bc1 23. Na3 Bxb2 24. Raf1 Rg8 25. Qxf7 Bxa3 26. Rxf6 Rg7 27. Qh5 Qg8
28. Rh6 Rxg3 0-1

'취미생활 > Chess' 카테고리의 다른 글

패배 경기 분석 (1300대)  (0) 2023.03.10

+ Recent posts