hugDog
Android DevLog
hugDog
전체 방문자
였늘
μ–΄μ œ
  • πŸ™Œ Hello? (162)
    • πŸ§©μ•ˆλ“œλ‘œμ΄λ“œ (12)
      • κ°œλ… 정리 (5)
      • 버그 ν•΄κ²° (4)
      • 기타 (3)
    • πŸ”μ•Œκ³ λ¦¬μ¦˜ (54)
      • κ°œλ… (0)
      • λ°±μ€€ (48)
      • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (6)
    • πŸ“„κ°œλ°œ 일지 (0)
      • FINPO (0)
    • πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (71)
      • C++ 정리 (49)
      • C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ μ—°μŠ΅λ¬Έμ œ (20)
      • Kotlin (2)
    • ⭐Project (1)
    • 🚴TIL (13)
      • Clean Code (13)
    • πŸš©κΈ°νƒ€ (9)
      • λͺ©ν‘œ (6)
      • 일상 (3)
      • λ¬Έμ„œ (0)

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
hugDog

Android DevLog

πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 정리

C++ 정리 - 12 (μžλ™ 곡간, 정적 곡간, 동적 곡간, λ³€μˆ˜ν˜•μ˜ μ‘°ν•©, Vector, array ν…œν”Œλ¦Ώ 클래슀)

2020. 1. 12. 23:00
728x90

μžλ™ 곡간, 정적 곡간, 동적 곡간

C++μ—μ„œ 데이터λ₯Ό μ €μž₯ν•΄ 두기 μœ„ν•œ λ©”λͺ¨λ¦¬λ₯Ό, λŒ€μž…ν•˜λŠ” 방법에 따라 μžλ™ 곡간, 정적 곡간, 동적 곡간(heap 라고도 뢀름) 으둜 ꡬ뢄됨


μžλ™ 곡간

μžλ™ λ³€μˆ˜

  • μžλ™ 곡간을 μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜ μ•ˆμ—μ„œ μ •μ˜λ˜λŠ” λ³΄ν†΅μ˜ λ³€μˆ˜λ“€

  • μžμ‹ μ΄ μ •μ˜λ˜μ–΄ μžˆλŠ” ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” μˆœκ°„μ— μžλ™μœΌλ‘œ μƒκ²¨λ‚˜ κ·Έ ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λŠ” μ‹œμ κΉŒμ§€λ§Œ μ‘΄μž¬ν•¨. 즉, μžμ‹ λ“€μ„ ν¬ν•¨ν•˜κ³  μžˆλŠ” λΈ”λŸ­ μ•ˆμ—μ„œλ§Œ 유효

  • μžλ™ λ³€μˆ˜λŠ” μŠ€νƒμ— μ €μž₯됨. 이것은 μŠ€νƒμ— κ·Έ 값이 순차적으둜 μ €μž₯되고, μ—­μˆœμœΌλ‘œ ν•΄μ œλ˜λŠ” 것을 μ˜λ―Έν•¨


정적 곡간

ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆμ— μ§€μ†μ μœΌλ‘œ μ‘΄μž¬ν•˜λŠ” 곡간

λ³€μˆ˜λ₯Ό μ •μ μœΌλ‘œ λ§Œλ“œλŠ” 방법

1. ν•¨μˆ˜μ˜ μ™ΈλΆ€μ—μ„œ λ³€μˆ˜ μ •μ˜

2. λ³€μˆ˜ μ„ μ–Έ μ‹œ static ν‚€μ›Œλ“œ 뢙이기


동적 곡간

new와 delete μ—°μ‚°μžλŠ” μœ΅ν†΅μ„± μžˆλŠ” 방법을 제곡

자유 곡간이라 λΆ€λ₯΄λŠ” λ©”λͺ¨λ¦¬ 풀을 관리함. 이 풀은 μžλ™ λ³€μˆ˜μ™€ 정적 λ³€μˆ˜κ°€ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬μ™€ λΆ„λ¦¬λ˜μ–΄ 있음

new와 deleteλŠ” μ–΄λ–€ ν•¨μˆ˜μ—μ„œ λ©”λͺ¨λ¦¬λ₯Ό λŒ€μž…ν•˜κ³ , λ‹€λ₯Έ ν•¨μˆ˜μ—μ„œ λ©”λͺ¨λ¦¬ ν•΄μ œ κ°€λŠ₯ 


λ³€μˆ˜ν˜•μ˜ μ‘°ν•©

λ°°μ—΄,ꡬ쑰,ν¬μΈν„°λŠ” 맀우 λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ μ‘°ν•© κ°€λŠ₯ν•˜λ‹€

struct antarctica_years_end

{

int year;

};

λ‹€μŒκ³Ό 같은 λ³€μˆ˜ 생성 κ°€λŠ₯

antarctica_years_end s01,s02,s03' //s01,s02,s03은 λͺ¨λ‘ ꡬ쑰체

멀버십 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λŠ” 멀버에 μ ‘κ·Ό κ°€λŠ₯

s01.year=1998;


포인터 생성 κ°€λŠ₯

antarctica_years_end * pa = &s02;

포인터가 μœ νš¨ν•œ μ£Όμ†Œλ₯Ό 가리킬 경우, 간접적 멀버십 μ—°μ‚°μž μ‚¬μš© κ°€λŠ₯

pa->year=1999;


κ΅¬μ‘°μ²΄λ“€μ˜ λ°°μ—΄ 생성 κ°€λŠ₯

antarctica_years_end trio[3];


멀버십 μ—°μ‚°μž μ‚¬μš© κ°€λŠ₯

trio[0].year = 2003;

λ°°μ—΄ 이름이 포인터 μ΄λ―€λ‘œ, κ°„μ ‘ 멀버십 μ—°μ‚°μž μ‚¬μš© κ°€λŠ₯.

(trio+1)->year=2004; //trio[1].year=2004와 동일

포인터 λ°°μ—΄ 생성 κ°€λŠ₯

const antractica_years_end *arp[3]={&s01,&s02,&s03};


κ°„μ ‘ 멀버십 μ—°μ‚°μž μ‚¬μš© κ°€λŠ₯

arp[1]->year;


배열에 λŒ€ν•œ 포인터

const antarctica_years_end **ppa=arp;

arpλŠ” λ°°μ—΄μ˜ 이름, 즉 첫 번째 μ›μ†Œμ˜ μ£Όμ†Œ, 포인터이닀.

λ”°λΌμ„œ ppaλŠ” const antarctica_years_end에 λŒ€ν•œ 포인터 즉, **κ°€ λ˜μ•Όν•¨

auto ppb = arp; //c++11μ—μ„œ μžλ™μœΌλ‘œ λ³€μˆ˜ν˜• 확인


간접적인 멀버십 μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜μ—¬ 데이터 μ ‘κ·Ό κ°€λŠ₯

(*ppa)->year

(*(ppb+1))->year


λ°°μ—΄μ˜ λŒ€μ•ˆ

Vector ν…œν”Œλ¦Ώ 클래슀

  1. vector 객체λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” vector 헀더 νŒŒμΌμ„ 포함해야 함

  2. using λͺ…λ Ή, using μ„ μ–Έ λ˜λŠ” std::vector μ‚¬μš© κ°€λŠ₯

  3. ν…œν”Œλ¦Ώμ€ μ €μž₯된 데이터 ν˜•νƒœλ₯Ό μ§€μ‹œν•˜κΈ° μœ„ν•΄ λ‹€λ₯Έ ꡬ문 μ‚¬μš©

  4. vector ν΄λž˜μŠ€λŠ” μ›μ†Œμ˜ 개수λ₯Ό μ§€μΉ­ν•˜κΈ° μœ„ν•΄ λ‹€λ₯Έ ꡬ문 μ‚¬μš©

vector<typename> vt(n_elem);

typeName ν˜•νƒœμ˜ n_elem μ›μ†Œλ“€μ„ λ³΄μœ ν•  수 μžˆλŠ” vt vector 객체 생성
λ§€κ°œλ³€μˆ˜ n_elem은 μ •μˆ˜ν˜• μƒμˆ˜ λ˜λŠ” μ •μˆ˜ν˜• λ³€μˆ˜κ°€ 될 수 μžˆλ‹€.

array ν…œν”Œλ¦Ώ 클래슀(C++11)
array κ°μ²΄λŠ” 자유 μ €μž₯ λŒ€μ‹ μ— κ³ μ •λœ 크기와 κ³ μ • λ©”λͺ¨λ¦¬ λŒ€μž…μ„ μ‚¬μš©ν•˜μ—¬ λ‚΄μž¬ 배열이 μ§€λ‹Œ 것과 λ™μΌν•œ μˆ˜μ€€μ˜ νš¨μœ¨μ„±μ„ μ§€λ‹˜

array<typeName,n_elem> arr;

typeName의 n_elem μš”μ†Œλ₯Ό ν†΅ν•΄μ„œ array 객체 arrλ₯Ό 생성함.
n_elem은 λ³€μˆ˜κ°€ 될 수 μ—†λ‹€.

λ°°μ—΄,Vector 객체,Array 객체 비ꡐ
  1. λ‚΄μž¬ λ°°μ—΄,vector 객체, λ˜λŠ” array 객체λ₯Ό μ‚¬μš©ν•˜λ˜ 간에, μ‚¬μš©μžλŠ” κ°œλ³„ 멀버에 μ ‘μ†ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν‘œμ€€ λ°°μ—΄ ν‘œμ‹ μ‚¬μš© κ°€λŠ₯ //즉 λ°°μ—΄κ³Ό λ˜‘κ°™μ€ λ°©μ‹μœΌλ‘œ μ‚¬μš© κ°€λŠ₯ ex) arr[2]=3; 
  2. μ£Όμ†Œλ₯Ό ν†΅ν•΄μ„œ array 객체가 λ™μΌν•œ μ§€μ—­μ˜ λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš© (stack)
  3. ν•˜λ‚˜μ˜ array 객체λ₯Ό 또 λ‹€λ₯Έ array 객체에 λŒ€μž… κ°€λŠ₯



728x90
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ (μƒˆμ°½μ—΄λ¦Ό)
    'πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 정리' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • C++ 정리 - 14 (μ‘°ν•© λŒ€μž… μ—°μ‚°μž, 볡합 ꡬ문 λ˜λŠ” 블둝, 콀마 μ—°μ‚°μž, 관계 μ—°μ‚°μž, CμŠ€νƒ€μΌ&string μŠ€νƒ€μΌ 문자 비ꡐ)
    • C++ 정리 - 13 (for 루프, 증가 μ—°μ‚°μž, κ°μ†Œ μ—°μ‚°μž, λΆ€μˆ˜νš¨κ³Όμ™€ μ‹œν€€μŠ€ 포인트, 접두어, μ ‘λ―Έμ–΄ 방식)
    • C++ 정리 - 11 (포인터 -3 포인터와 λ°°μ—΄ μ΄λ¦„κ°„μ˜ 차이, 포인터,λ°°μ—΄,포인터 μ—°μ‚°, λ°°μ—΄μ˜ μ£Όμ†Œ, 포인터와 λ¬Έμžμ—΄, λ¬Έμžμ—΄μ˜ 볡사본, newλ₯Ό μ‚¬μš©ν•œ 동적 ꡬ쑰체)
    • C++ 정리 - 10 (포인터 -2 포인터와 수, newλ₯Ό μ‚¬μš©ν•œ λ©”λͺ¨λ¦¬ λŒ€μž…, delete, 동적 λ°°μ—΄)
    hugDog
    hugDog
    μ•ˆλ“œλ‘œμ΄λ“œ 곡뢀 쀑인 ν•™μƒμž…λ‹ˆλ‹€!

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”