- 2012λ
κ·Έλ€μ΄ μ€ν°λλ₯Ό μμνλ€.
- C/C++/Java λͺ¨λ λ€λ₯Έ μΈμ΄μ§λ§ νλμμ μμνμΌλ...
- ALGOLκ³ μΈμ΄λΌκ³ λ νλ€κ³ νλ€.. κΆκΈν΄ ν μ¬λμ μν΄
- κ·Έλ¬λ λΉμ·ν μκΈ°μ νμν Fortran, lispλ±μ μ νκ³ μ΄ν λλΆλΆμ μΈμ΄μκ² μν₯μ μ£ΌμμΌλ ALGOLκ³Ό 무κ΄ν μΈμ΄κ° μμκΉ..
- ALGOLκ³ μΈμ΄λΌκ³ λ νλ€κ³ νλ€.. κΆκΈν΄ ν μ¬λμ μν΄
Contents
2. λͺ©μ ¶
- C/C++/Java μΈμ΄λ₯Ό 곡λΆνκ³ μλ‘κ°μ μ¬μ©μ μ°¨μ΄μ κ³Ό 곡ν΅μ μΈ ν¨ν΄ νμ΅
- μλ‘ λ€λ₯Έ μΈ μΈμ΄λ₯Ό λ§μΉ νμΈμ΄μ²λΌ μΈμ μκ²λ..
- μ΄μ¬μ λνμ
3.1.1. νλ‘κ·Έλλ° μΈμ΄μ νμ μμ ¶
- μ μ΄λ¬Έ, λ°λ³΅λ¬Έ, λ³μ, I/O
- I/Oλ μ½μ λΏλ§μλλΌ λ€λ₯Έ μ΄λ€κ²μ΄ λ μ μλ€.
- μΌλΉ λ―ΈνΈλμ λͺ¨λν°κ° μμ΄μ μ‘νλ€.
- μΌλΉ λ―ΈνΈλμ λͺ¨λν°κ° μμ΄μ μ‘νλ€.
- I/Oλ μ½μ λΏλ§μλλΌ λ€λ₯Έ μ΄λ€κ²μ΄ λ μ μλ€.
3.1.2. c++μ "hello world" νλ‘κ·Έλ¨μ λ―μ΄λ³΄μ ¶
#include <iostream> using namespace std; int main(){ cout<<"hello!"<<endl; return 0; }
- #μ΄ λΆμ΄μλ λͺ
λ Ήμ΄ - Preprocessorκ° μ²λ¦¬
- #include, #define, #ifndef λ±...
- λμ€μ λ°°μ°κ² μ§λ§ μ΄κ±΄ μμΈμλ‘ μ’μ - μνμ€
- μ? μ»΄νμΌλ¬λ μ΄λ°κ±° λͺ¨λ₯΄κΈ° λλ¬Έ.
- μ? μ»΄νμΌλ¬λ μ΄λ°κ±° λͺ¨λ₯΄κΈ° λλ¬Έ.
- #include, #define, #ifndef λ±...
- namespace : μ΄λ¦ μ€λ³΅μ λ§κΈ° μν΄ μ¬μ©
- using namespace NAME; -> NAMEμ namespaceλ₯Ό ν΄λΉ scope μμμ μ΄μ©νκ² λ€λ κ²
- using namespace NAME; -> NAMEμ namespaceλ₯Ό ν΄λΉ scope μμμ μ΄μ©νκ² λ€λ κ²
- std
- κΈ°λ³Έ ν¨μλ€μ namespace
- κΈ°λ³Έ ν¨μλ€μ namespace
- using
- μ§κΈλΆν° μ΄λ€ νΉμ λ€μμ€νμ΄μ€λ₯Ό μ°κ² λ€λ μ§μμ΄.
- μ§κΈλΆν° μ΄λ€ νΉμ λ€μμ€νμ΄μ€λ₯Ό μ°κ² λ€λ μ§μμ΄.
- λ¬Έμμ΄
- charμ λ°°μ΄, null terminated char sequence
- μλ°μμλ μλκ² μ²λΌ 보μ¬λ μ¬μ€ λ΄λΆμ μΌλ‘λ λΉμ·νλ€.
- string Class
- charμ λ°°μ΄, null terminated char sequence
- endl
- λΌμΈλ λ¬Έμλ₯Ό μΆλ ₯νκ³ λ²νΌλ₯Ό λΉμ΄λ€.
- λΌμΈλ λ¬Έμλ₯Ό μΆλ ₯νκ³ λ²νΌλ₯Ό λΉμ΄λ€.
- return 0;
- UNIX/LINUX κ³μ΄μμλ μ€μν μ 보
- μ΄κ±Έλ‘ νλ‘κ·Έλ¨μ΄ μ λλ‘ λλ¬λμ§ νλ¨νλ€.
- returnμλ μ€μν νΉμ±μ΄ μλλ° μ΄κ² νΈμΆλλ©΄ μ§μλ³μλ₯Ό μ 리νλ€.
- main ν¨μμ 리ν΄κ°
- UNIX/LINUX κ³μ΄μμλ μ€μν μ 보
3.1.3. λ³μ ¶
- μ μ - μ΄λ€ κ°μ λ΄μμ μλκ².
- C/C++/JAVAμ νμ κ°μ νλ κ°νμΈμ΄κΈ° λλ¬Έμ νμ΄ μλ€.
- λΉμ°ν κ°νμΈμ΄κ° λ λΉ λ₯΄κ² λμν μ μλ€. CPUμμ μ΄λ€ λͺ¨λμ μ°λμ§ μκΈ° λλ¬Έ.
- λΉμ°ν κ°νμΈμ΄κ° λ λΉ λ₯΄κ² λμν μ μλ€. CPUμμ μ΄λ€ λͺ¨λμ μ°λμ§ μκΈ° λλ¬Έ.
- C/C++/JAVAμ νμ κ°μ νλ κ°νμΈμ΄κΈ° λλ¬Έμ νμ΄ μλ€.
- μ μ
- int, long, long long, short, char
- intν¬κΈ°λ CPUκ° νλ²μ μ²λ¦¬ν μ μλ μ μ - λΉμ°ν 16bitμμλ λ€λ₯Όμ μλ€.
- long long κ°μ κ²½μ°μλ μμμλ μλ€.
- int, long, long long, short, char
- μ€μ
- float, double
- floatκ° floatμΈ μ΄μ - λΆλ μμμ μ΄λΌμ....
- double μ κ·Έλ₯ double floatλΌμ..
- floatκ° floatμΈ μ΄μ - λΆλ μμμ μ΄λΌμ....
- float, double
- bool
- 1bit μ§λ¦¬.
- Cλ boolμ΄ μλ€!, c++μ μλ€. javaλ booleanμΌλ‘ μ¬μ©νλ€. - C11μ μλ¨λ€.
- λλΆλΆμ κ²½μ° κ·Έλ₯ μ μλ‘ μ²λ¦¬νλ€.
- κ°μ΄ 0μ΄λ©΄ false κ·ΈμΈλ true
- c++μμλ 0μ falseλ‘, κ·ΈμΈλ trueλ‘ κ°μ£Όλλ€. while(1) {}, while(true) {} λ λ€ κ°λ₯
- javaμμλ intμ booleanμ νΈνλμ§ μλλ€. while(1) {}λ μ»΄νμΌμλ¬.
- κ°μ΄ 0μ΄λ©΄ false κ·ΈμΈλ true
- 1bit μ§λ¦¬.
3.1.4. μ μ΄λ¬Έ, λ°λ³΅λ¬Έ ¶
- μ μ΄λ¬Έκ³Ό λ°λ³΅λ¬Έμ μ΄μ°λ³΄λ©΄ λμΉ.
- switch caseλ¬Έμμ caseλ μ»΄νμΌλ¬λ§ μλΏ(Labelμ΄λΌλ μ리..)
- μΈ μΈμ΄μμ caseλ¬Έ λ€λ "μ μ" μ΄λ€.
- ASCIIμ μμ§λ§λΌ.
- java7λΆν° λ¬Έμμ΄μμ case label μ§μ. case "hello": ...; κ° λλ€.
- ASCIIμ μμ§λ§λΌ.
3.2.1. ν¬μΈν° (Pointer) ¶
- void pointer μ¬μ© μμ ν©μλ€. void pointerκ° κ°λ¦¬ν€λ κ°μ νμ
μ μΆλ‘ ν μ μλ€. μ°Έκ³
3.2.2. ν¨μ (Function) ¶
- functionμ΄λ inputκ³Ό outputμ΄ μλ κΈ°λ₯ λ¨μ
- ν¨μμ parameter λ₯Ό λκ²¨μ£Όμ§ μκ±°λ return μ΄ μλ ν¨μλ μμ.
- ν¨μμ parameter λ₯Ό λκ²¨μ£Όμ§ μκ±°λ return μ΄ μλ ν¨μλ μμ.
- λ§μ κΈ°λ₯μ μκ² μͺΌκ°κΈ° μν΄ ν¨μλ₯Ό μ¬μ©νλ€.
- κ°λ
μ±μ μ’κ² νλ€.
- μ½λμ μ¬μ¬μ©μ±μ λμΈλ€.
- global variableμ μ¬μ©μ μμ νμ. ν¨μμ κΈ°λ₯μ μ΄ν΄νκΈ° μ΄λ ΅κ² λ§λ λ€.
- λ³μ μ κ·Όμ μ μ΄νκΈ° νλ€κΈ° λλ¬Έμ λ²κ·Έλ₯Ό μ λ°ν νλ₯ λ μ¦κ°νλ€.
- λ³μ μ κ·Όμ μ μ΄νκΈ° νλ€κΈ° λλ¬Έμ λ²κ·Έλ₯Ό μ λ°ν νλ₯ λ μ¦κ°νλ€.
- νλΌλ©ν° μ λ¬ λ°©μ
- call by value
- call by pointer
- call by reference(alias)
- call by value
- C/C++/Javaμ parameterλ call-by-value νμμΌλ‘ κ°μ μ λ¬νλ€.
- ν¬μΈν° κ°μ μ λ¬νλ Call-by-referenceμ κ²½μ°λ, ν¬μΈν° κ°μ 볡μ¬μ λ°©μμΌλ‘ μ λ¬νκ² λλ―λ‘, μΌμ’
μ call-by-valueλΌκ³ λ³Ό μ μλ€.
- μ°Έμ‘°λ λ΄λΆμ μΌλ‘ ν¬μΈν°λ₯Ό μ΄μ©νλ€.
- C/C++μ ν¨μ νΈμΆ λ°©λ²(Calling Convention)
- __stdcall, __thiscall, __pascal, __syscall λ±
- μΈμμ μ λ¬ λ°©μκ³Ό stackμ ν΄μ λ°©λ²μ μ°¨μ΄
- μΈμμ μ λ¬ λ°©μκ³Ό stackμ ν΄μ λ°©λ²μ μ°¨μ΄
- ν¨μ decorator : C++μ μ€λ²λ‘λ©μ νκ² λλ©΄, μ»΄νμΌ νμμμ κ°κ°μ ν¨μλ₯Ό ꡬλΆν μ μλλ‘ λΆλ λ¨Έλ¦Ώλ§
- extern "C"λ₯Ό μ΄μ©νλ©΄ μ΄λ¬ν ν¨μ decoratorκ° μμ΄μ§λ€.
- extern "c"μ μλ―Έ?
- c++11(μλ§λ?) Working Draftμ 7.5μ linkage specification μ°Έκ³
- extern "c"μ μλ―Έ?
- __stdcall, __thiscall, __pascal, __syscall λ±
3.4. 2013λ 1μ 22μΌ ¶
- μ€μ΅. μ νλμν κ³μ°κΈ°λ₯Ό λ§λ€μ΄λ³΄κΈ°
- #ifndef NAME : #define NAMEμ΄ λμ΄μμ§ μλ κ²½μ°μ μλνλ€. μ£Όλ‘ ν€λνμΌ μ€λ³΅ includeλ₯Ό λ§κΈ° μν΄ μ¬μ©νλ€.
~cpp #ifndef _HEADER_FILE_NAME_ // naming ruleμ΄ λ°λ‘ μλμ§ λͺ¨λ₯΄κ² μ #define _HEADER_FILE_NAME_ ... // header source ... #endif _HEADER_FILE_NAME_
- #pragma onceλ λμΌν ν¨κ³Όλ₯Ό μ€λ€. μ 체 μμ€μ½λλ₯Ό λ¨ νλ²λ§ include νλ€. (λΉνμ€)
- λΉνμ€μ΄μ§λ§ κ±°μ λͺ¨λ μ»΄νμΌλ¬κ° μ§μνλ―λ‘ defacto
- λΉνμ€μ΄μ§λ§ κ±°μ λͺ¨λ μ»΄νμΌλ¬κ° μ§μνλ―λ‘ defacto
~cpp #pragma once
- const λ©€λ² ν¨μμ ν¨κ³Ό
- returnλλ κ°μ μ°Έμ‘°νλ ꡬ문μ μμ±νλ©΄ dangling pointer μνμ΄ μλ€.
- move constructor(?)
- μ°μ°μ μ€λ²λ‘λ© : C++μμλ operatorλ₯Ό μ΄μ©ν΄μ μ°μ°μμ νΉμ κΈ°λ₯μ μ μν μ μλ€. Cμ μλ°μμλ μ λλ€.
- μ°μ°μ μ€λ²λ‘λ©μμ friendκ° νμνλ μ΄μ !
- intμ κ°μ²΄μμ κ³±μ
μ ꡬν, λ¨μ λ©€λ²ν¨μ
- intμ κ°μ²΄μμ κ³±μ
μ ꡬν, λ¨μ λ©€λ²ν¨μ
- μ€ν λ°μ±, μΈλ°μ±(μλμΌλ‘ ννλ₯Ό λ³νν΄μ€λ€?)
- <<λ shift μ°μ°μμ μ€λ²λ‘λ© ν κ² (stream)
- μ°μ°μ μ€λ²λ‘λ©μ ν κ²½μ°, κ°μ²΄ uμ vκ° μμΌλ©΄, u+v == u.operator+(v) μ κ°λ€.
3.5. 2013λ 1μ 29μΌ ¶
- μ κΈ°ν ν¬μΈν° λμ΄
class foo { void hello(void) { cout << "hello" << endl; } }μ΄λ κ² μ μ ν΄ λμ μνμμ
int main() { foo *bar = NULL; bar->hello(); }μ΄λ κ² μμ±ν΄μ μ€ννλ©΄, 보기μλ μ€νμ΄ μ λ κ² κ°μ§λ§ μ€νμ΄ λλ€.
- μΈμ€ν΄μ€λ NULLλ₯Ό κ°λ¦¬ν€μ§λ§, μ€μ λ‘ μ€νλ λλ hello ν¨μλ§μ νΈμΆνκΈ° λλ¬Έμ΄λ€. (λ¬Έμ₯ μ€λͺ
μ΄ λΆμ‘±νλ°?)
- stackμ΄λ heapμμ λ°μ΄ν°λ₯Ό free ν λ, μ€μ λ‘ ν¬μΈν°λ§ μ΄λμ΄ λλ€. κ·Έλμ μ€μ λ‘λ λ°μ΄ν°κ° λ©λͺ¨λ¦¬μ λ¨μμκ² λλ€(κΈ°μ‘΄μ κ°μ μ΄κΈ°νν ν νμμμ΄ ν λΉ νλκ·Έλ§ ν΄μ νλ©΄ λλ―λ‘). μ€κ°μ λ€λ₯Έ κ³³μμ νΈμΆμ΄ λ κ²½μ°μ λ°μ΄ν°κ° λμ΄ μ¨μ§λ λ¬Έμ κ° λ°μν μ μμΌλ―λ‘, dangling pointerλ₯Ό μ‘°μ¬ν΄μΌ νλ€.
- μ΄ μ΄μΌκΈ°λ osμ κ°μ© λ©λͺ¨λ¦¬ νκ³Ό μκ΄μ΄ μκ΅° - μμ§ν
- μ΄ μ΄μΌκΈ°λ osμ κ°μ© λ©λͺ¨λ¦¬ νκ³Ό μκ΄μ΄ μκ΅° - μμ§ν
- ostringstream -> streamμ λκ° νλ©΄ stringμΌλ‘ λμ¨λ€
- κ°λ³ μΈμ void NAME (int name, β¦)
'β¦'μ κ°λ³ μΈμλ₯Ό ννν κ²μ΄λ€.
void Func(int κ³ μ μΈμ, β¦) { va_list ap; va_start(ap, κ³ μ μΈμ); va_arg(ap, μΈμνμ ); -> κ°λ³ μΈμλ₯Ό μ½λ λͺ λ Ή va_end(ap); }
- νμ 보μ₯νμ§ μλλ€. κ°λ³μΈμλ€μ νμ κ°μ ν μ μκΈ° λλ¬Έμ stackμ void*λ‘ μ μ₯λλ€. κ·Έλ¦¬κ³ μ΅μν μΈμκ° νλλ μμ΄μΌ νλ€.
- printfλ μ΄λ»κ² μΈμλ€μ νμ κ΄λ¦¬νμ§? - μμ§ν
- printfμ κ²½μ°μλ 첫째μΈμλ‘ νμ νλ¨ν μ μκΈ° λλ¬Έμ λ¬Έμ κ° λμ§ μμ£ . νμ§λ§ κ°μ μ΄μ μμμΈμ§ printf("%f", 3) μ μλͺ»μΆλ ₯νλ λ¬Έμ κ° μμ΅λλ€. μ΄ μ·¨μ½μ μ μ΄μ©ν ν΄νΉ λ°©λ²λ μ‘΄μ¬νμ§μ. - μνμ€
- 첫λ²μ§Έ μΈμ μμ %d.. λ±μΌλ‘ κ°λ³μΈμμ νμ κ²μ¬νλκ±°μΌ? - μμ§ν
- μ λ΅! 첫λ²μ§Έ μΈμμ μ΄λ―Έ νμλν μ 보λ₯Ό λ겨 μ£ΌκΈ° λλ¬Έμ κ°λ³μΈμλΌλ λμ³κ° κ°λ₯ν©λλ€.
- μ λ΅! 첫λ²μ§Έ μΈμμ μ΄λ―Έ νμλν μ 보λ₯Ό λ겨 μ£ΌκΈ° λλ¬Έμ κ°λ³μΈμλΌλ λμ³κ° κ°λ₯ν©λλ€.
- 첫λ²μ§Έ μΈμ μμ %d.. λ±μΌλ‘ κ°λ³μΈμμ νμ κ²μ¬νλκ±°μΌ? - μμ§ν
μμ μ½λ - printfλ μ΄λ»κ² μΈμλ€μ νμ κ΄λ¦¬νμ§? - μμ§ν
#includeΒ <iostream> #includeΒ <cstdarg> usingΒ namespaceΒ std; voidΒ test(intΒ num,Β ...)Β { va_listΒ ap; va_start(ap,Β num); for(intΒ i=0;Β i<num;Β i++)Β { coutΒ <<Β va_arg(ap,Β int)Β <<Β endl; } va_end(ap); } intΒ main(void)Β { test(5,Β 1,2,3,4,5); returnΒ 0; }
- stl vectorλ₯Ό μ΄μ©ν class vector λ§λ€κΈ°
- namespaceλ‘ κ°μ μ΄λ¦μ κ°μ§ ν΄λμ€λ€μ μ¬μ©ν΄λ³΄μ
- namespaceλ‘ κ°μ μ΄λ¦μ κ°μ§ ν΄λμ€λ€μ μ¬μ©ν΄λ³΄μ
- templateκ³Ό friend
- templateμ friend μ¬μ΄μ μ¬λ¬ λ§€νμ΄ μ‘΄μ¬νλ€. many to many, one to many, many to one, one to one : μ°Έκ³
- templateμ friend μ¬μ΄μ μ¬λ¬ λ§€νμ΄ μ‘΄μ¬νλ€. many to many, one to many, many to one, one to one : μ°Έκ³
- c++11μμ autoμ μλ―Έκ° λ¬λΌμ‘λ€??
3.6. 2013λ 2μ 13μΌ ¶
- κ°λ³μΈμμ μ·¨μ½μ μ μ΄μ©ν 곡격 (Format String Attack)
- μ°Έκ³ : http://www.hackerschool.org/HS_Boards/data/Lib_system/The_Mystery_of_Format_String_Exploitation.pdf
- κ°λ³μΈμμ νμ κ²μ¬νλ μ£Όμ²΄κ° μ»΄νμΌλ¬κ° μλ, ν¨μμ΄κΈ° λλ¬Έμ΄λ€.
- μ°Έκ³ : http://www.hackerschool.org/HS_Boards/data/Lib_system/The_Mystery_of_Format_String_Exploitation.pdf
- privateμ μμ
- private μμμ λ°κ² λλ©΄, ν΄λμ€ λ΄μμλ§ μ¬μ©ν μ μκ³ , μΈλΆμμλ μ κ·Όμ ν μ μλ€. λΆλͺ¨ ν΄λμ€κ° κ°μν¨μλ₯Ό κ°μ§κ³ μκ³ , μ΄κ²μ μ¬μ μ ν΄μ μ¬μ©ν μ μλ€.
- μ΄λ€ ν΄λμ€λ₯Ό μ°λ, μΈλΆμ 곡κ°νμ§ μκ³ , κ°μν¨μλ₯Ό μμλ°μμΌ ν λ μ¬μ©ν μ μλ€.
- (μ¬μ€ people ν΄λμ€ μμ DataInfoλ₯Ό λ©€λ² λ³μλ‘ μ μΈν΄μ μ¬μ©ν΄λ λκΈ΄ νλ€. νμ§λ§ private μμμ λ°μ λ λ³΄λ€ λ©λͺ¨λ¦¬λ₯Ό λ λ§μ΄ μ¬μ©νκ² λκΈ° λλ¬Έμ, private μμμ μ°λ κ² μ’λ€.)
- (μ¬μ€ people ν΄λμ€ μμ DataInfoλ₯Ό λ©€λ² λ³μλ‘ μ μΈν΄μ μ¬μ©ν΄λ λκΈ΄ νλ€. νμ§λ§ private μμμ λ°μ λ λ³΄λ€ λ©λͺ¨λ¦¬λ₯Ό λ λ§μ΄ μ¬μ©νκ² λκΈ° λλ¬Έμ, private μμμ μ°λ κ² μ’λ€.)
- private μμμ λ°κ² λλ©΄, ν΄λμ€ λ΄μμλ§ μ¬μ©ν μ μκ³ , μΈλΆμμλ μ κ·Όμ ν μ μλ€. λΆλͺ¨ ν΄λμ€κ° κ°μν¨μλ₯Ό κ°μ§κ³ μκ³ , μ΄κ²μ μ¬μ μ ν΄μ μ¬μ©ν μ μλ€.
- #defineμ typedefμ μ°¨μ΄
- #defineμ λ§€ν¬λ‘μ΄κΈ° λλ¬Έμ, preprocessorμ μν΄μ μ²λ¦¬λκ³ , typedefλ compilerμ μν΄ μ²λ¦¬λλ€.
- #defineμ λ§€ν¬λ‘μ΄κΈ° λλ¬Έμ, preprocessorμ μν΄μ μ²λ¦¬λκ³ , typedefλ compilerμ μν΄ μ²λ¦¬λλ€.
- ν¨μ μΉ΄λ λ¬Έμ (thanks to μμ§ν λλ)
int a, b =5; a= b++ + ++b + ++b + ++b + b++ ;
- aμ κ°μ λκΉ?
- ++b(1st), +(2nd), b++(3rd), =(4th)
- μ°μ°μ μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ μ§ν.
- ++b(1st), +(2nd), b++(3rd), =(4th)
- containerμ μ’
λ₯
- standard STL sequence container
- vector(λ©λͺ¨λ¦¬κ° μ°μμ μΈ (λμ ) λ°°μ΄), string, deque(double ended queue, λ±μ΄λΌκ³ λ νλ€. μ°Έκ³ ), list(linked-list)
- vector(λ©λͺ¨λ¦¬κ° μ°μμ μΈ (λμ ) λ°°μ΄), string, deque(double ended queue, λ±μ΄λΌκ³ λ νλ€. μ°Έκ³ ), list(linked-list)
- standard STL associate container
- set(μ§ν©, μμκ° μλ 리μ€νΈ, μ€λ³΅μ νμ© μν¨), multiset, map(keyμ valueκ° μ§μ μ§μ΄μ setμΌλ‘ μ μ₯λλ€), multimap (setκ³Ό mapμ input λ λ, valanced tree ννλ‘ μ μ₯λκΈ° λλ¬Έμ search timeμ΄ νμ log nμ μ μ§ν μ μλ€. μ¦, λ€μ΄μ¨ μμμ μ λ ¬ μμκ° μΌμΉνμ§ μκ² λλ€.)
- set(μ§ν©, μμκ° μλ 리μ€νΈ, μ€λ³΅μ νμ© μν¨), multiset, map(keyμ valueκ° μ§μ μ§μ΄μ setμΌλ‘ μ μ₯λλ€), multimap (setκ³Ό mapμ input λ λ, valanced tree ννλ‘ μ μ₯λκΈ° λλ¬Έμ search timeμ΄ νμ log nμ μ μ§ν μ μλ€. μ¦, λ€μ΄μ¨ μμμ μ λ ¬ μμκ° μΌμΉνμ§ μκ² λλ€.)
- standard STL sequence container
- non-standard sequence container
- slist(single-list), rope(λμ©λ string)
- slist(single-list), rope(λμ©λ string)
- non-standard associate container
- hash-set(hash κ³μ΄λ€)
- λμκ΄ == hash system (μ±
λ§λ€ κ³ μ λ²νΈκ° λΆμ΄μμ)
- hashλ λ©λͺ¨λ¦¬λ₯Ό λ§μ΄ λ¨Ήλλ€.
- λμκ΄ == hash system (μ±
λ§λ€ κ³ μ λ²νΈκ° λΆμ΄μμ)
- hash-set(hash κ³μ΄λ€)
- not in STL container
- bitset, valarray, stack, queue
- bitset, valarray, stack, queue
- μμ κ°κ°μ μμλ λ©λͺ¨λ¦¬ κΈ°λ°, node κΈ°λ°(linked-list)μΌλ‘ ꡬλΆμ΄ λλ€.
- vector<bool>μ μΌλ°μ μΈ vector μ°μ°μ΄ λΆκ°λ₯νλ°, μ΄κ±Έ ν΄κ²°νκΈ° μν΄ bitsetμ μ΄μ©νλ€.
- setκ³Ό hash-set
- setμ valanced tree ννλ‘ μ μ₯λλ€. hash-setμ μμκ° λ³΄μ₯μ΄ λμ§ μλλ€.
- stringκ³Ό vector<char> -> μ°Έμ‘° μΉ΄μ΄ν
μ μ νκΈ° λλ¬Έμ, vectorλ‘ μΈ κ²½μ° λ λΉ λ₯Ό μ μλ€.
- μ½μ
κ³Ό μμ μ transaction(μμ
νλ€κ° μ€λ₯κ° λ κ²½μ°, λμκ° μ μλ κΈ°λ₯)μ΄ κ°λ₯ν κ²½μ°
- listλ 보μ₯λ¨. vectorλ 보μ₯λμ§ μμ
- 무ν¨νκ° μ μ΄μΌ νλ κ²½μ°μλ node κΈ°λ°(list, set)μ μ¬μ©ν΄μΌ νλ€.
- 무ν¨νκ° μ μ΄μΌ νλ κ²½μ°μλ node κΈ°λ°(list, set)μ μ¬μ©ν΄μΌ νλ€.
- setμ valanced tree ννλ‘ μ μ₯λλ€. hash-setμ μμκ° λ³΄μ₯μ΄ λμ§ μλλ€.
- vector<bool>μ μΌλ°μ μΈ vector μ°μ°μ΄ λΆκ°λ₯νλ°, μ΄κ±Έ ν΄κ²°νκΈ° μν΄ bitsetμ μ΄μ©νλ€.
ArrayList arr; //arr.size() = 10; for(int i=0; i<10; i++) { arr.delete(i); } arr.size == 0; (???)
- μ΄λ κ² μμ±νμ λ, arr.sizeλ 0μ΄ λμ§ μλλ€λ κ²μ νμΈν μ μλ€.
- arr.size()λ λ
μν 0μ΄ λμ§ μλλ€.. naver.. iκ° 5μΌ λ ArrayIndexOutOfBounds Exceptionμ΄ λ°μνλ€
- arr.size()λ λ
μν 0μ΄ λμ§ μλλ€.. naver.. iκ° 5μΌ λ ArrayIndexOutOfBounds Exceptionμ΄ λ°μνλ€
- vectorμ μ½μ
, μμ κ° μΌμ΄λ λ, μ 체 λ°°μ΄ ν¬κΈ°κ° μ ν ν¬κΈ°(1024)λ₯Ό λμ΄κ° κ²½μ°, 2λ°° ν¬κΈ°μ λ°°μ΄μ λ§λ€κ² λλλ°, μ΄ λ κ°κ°μ ν΄λΉνλ ν¬μΈν°κ° μ λΆ λ°λκ² λλ―λ‘ '무ν¨ν' λλ κ²μ΄λ€.
- κ·Έλ°λ°, μ νν 무ν¨ν μμ μ μ μ μμΌλ―λ‘, μΈμ λ μ§ λ¬΄ν¨ν λ μ μλ€κ³ μκ°νλ κ²μ΄ μ’λ€.
- qsort μμ±μ μν΄μλ ν¨μ ν¬μΈν°λ₯Ό μ§μ ν΄μΌ νλλ°, C++μ ν΄λμ€λ₯Ό μ΄μ©νλ©΄ μ΄κ²μ μλ΅ν μ μλ€.
vector <widget *> ar; ar,push_back(new widget()); ar.pop();
- μ΄λ κ² λ κ²½μ°, widgetμ κ³μ μμ±λλλ°, popμ νλ©΄, λ§λ€μ΄μ§ widgetμ κ³μ λ©λͺ¨λ¦¬μ μμ£Όνκ³ , widgetμ κ°λ¦¬ν€κ³ μλ ar νλͺ©λ€λ§ μμ λλ€. κ·Έλμ, shared_ptrμ μ¬μ©νλ€.
- tr1μ C++0xμμ μ μ λ κ²λ€μ΄ tr1 namespaceλ‘ μ μλμ΄ μμλλ° C++11μ΄ λμ€λ©΄μ λ€ ν΅ν©λμλ€κ³ νλ€.
- boostλ c++ libraryμΈλ°, μ£Όμ μ°λ ν¨μλ ν¨ν΄λ€μ λ€ λͺ¨μ λμ κ²λ€μ΄λ€. (javaμ jUnit κ°μ κ±°?)
vector v;
μΌ λ
if(v.size()==0)
μ΄κ² 보λ€λ
if(v.empty());λ₯Ό μ¨μ 곡백μΈμ§ νμΈνλ€.
- μλκ° λΉ λ₯΄λ€. sizeλ₯Ό ꡬνλ κ³Όμ μ΄ μλ΅λκ³ , μ€λ₯λ₯Ό μ€μΌ μ μλ€.
- vectorμ swap
- vectorμ reserve
- forλ¬Έμ μ΄μ©ν΄μ 100κ°λ₯Ό ν λΉνλ κ² λ³΄λ€, reserve(100)μ ν΄μ ν λΉνλ κ²μ΄ ν¨μ¨μ μ΄λ€.
- forλ¬Έμ μ΄μ©ν΄μ 100κ°λ₯Ό ν λΉνλ κ² λ³΄λ€, reserve(100)μ ν΄μ ν λΉνλ κ²μ΄ ν¨μ¨μ μ΄λ€.
- vectorμ resize
- resizeλ reserveμ ν λΉνλ μν μ μ΄κΈ°νκΉμ§ ν΄ μ€λ€.
- resizeλ reserveμ ν λΉνλ μν μ μ΄κΈ°νκΉμ§ ν΄ μ€λ€.
3.7.1. μ©μ΄ μ μ ¶
- μ μΈ(Declaration) - μ΄λ€ λμμ μ΄λ¦κ³Ό νμ
μ μ»΄νμΌλ¬μκ² μλ € μ£Όλ κ²
e.g. extern int x; class Widget;
- μ μ(Definition) - ꡬνμ΄ λ€μ΄ μλ κ²½μ°.
e.g. int x; class Widget{ Widget(); .... }
- κ°μ²΄ - Effective C++μμλ λμ λ²μλ‘ κ°μ²΄λ₯Ό μ μ. Premetive typeλ κ°μ²΄λ‘ λ³΄κΈ°λ‘ ν¨.
- μ΄κΈ°ν - μ΄λ€ κ°μ²΄μ μ΅μ΄μ κ°μ λΆμ¬νλ κ³Όμ .
- μμ±μ - νΉλ³ν μ μ μμ΄λ μΈ κ°μ§μ μμ±μκ° μ μλλ€.
- κΈ°λ³Έ μμ±μ, λ³΅μ¬ μμ±μ(copy constructor), λ³΅μ¬ λμ μ°μ°μ(copy assignment operator).
- λ³΅μ¬ μμ±μ - μ΄λ€ κ°μ²΄μ μ΄κΈ°νλ₯Ό μν΄ κ·Έμ κ°μ νμ
μ κ°μ²΄λ‘λΆν° μ΄κΈ°νν λ νΈμΆλλ ν¨μ.
//e.g. Widget w1 = w2;
e.g. functionμ call by valueλ‘ κ°μ²΄λ₯Ό λκ²¨μ€ κ²½μ°,
- λ³΅μ¬ λμ
μ°μ°μ - κ°μ νμ
μ λ€λ₯Έ κ°μ²΄μ μ΄λ€ κ°μ²΄μ κ°μ 볡μ¬νλ μ©λλ‘ μ°μ΄λ ν¨μμ΄λ€.
- ν¨μ κ°μ²΄
- λ―Έμ μ λμ - ν°μ§μ§ μ ν°μ§μ§λ λͺ¨λ¦.
//e.g. struct Line{ string str; Line* next; }; b = (Line *)malloc(sizeof(Line)); b->str = input(); // BOOM! l->next = b;
μ΄μ λ stringμ μμ±μκ° νΈμΆλμ§ μμΌλ―λ‘(mallocμ μν΄μ)
//e.g. Widget w1; Widget w2; w1 = w2;
3.7.2. Chapter 1. C++λ₯Ό μΈμ΄λ€μ μ°ν©μ²΄λ‘ λ°λΌλ³΄λ μλͺ© νμ ¶
- C, OOP, Template, STL
- C++μ ν¨λ¬λ€μμ΄ λ€μνκΈ° λλ¬Έμ C++λ₯Ό μ¬μ©νλ λ°©λ²λ λ§€μ° λ¬λΌμ§ μ μκ³ μ΅μ ν λ°©λ²λ λ¬λΌμ§ μ λ°μ μλ€.
- μ°λ λ°©λ²μ λ°λΌμ μΌλ°μΌμΈ κ²!
3.7.3. Chapter 2. #defineμ μ°λ €κ±°λ const, enum, inlineμ λ μ¬λ¦¬μ. ¶
- #defineμ μ¬μ©νλ©΄ μ»΄νμΌλ¬κ° μ‘μμ£Όμ§ λͺ»ν΄μ μλ¬λ₯Ό λ°μμν¬ κ°λ₯μ±μ΄ ν¬λ€. κ·Έλ¬λ μ΄ λ§μ΄ #defineμ μ¬μ©νμ§ λ§λΌλ μλ―Έλ μλλ€! μΌλ°μΌλ‘μ #defineμ΄ constλ³΄λ€ λ§λ κ²½μ°λ μ‘΄μ¬νλ€.
//e.g. const int A const some A
//μΈλΆμμ extern some A //μ κ²½μ° Aκ° μ΄κΈ°νκ° μλ μ μλ€. scopeμ λ°λ₯Έ λ¬Έμ κ° λ°μ λ μ μλ€.
- Macro Functionμ΄ νμν κ²½μ° - inline template functionμΌλ‘ λ체 νλ©΄ ν΄κ²°
3.7.4. Chapter 3. λμλ§ λ³΄μ΄λ©΄ constλ₯Ό λ€μ΄λ 보μ. ¶
//e.g. const char * p = greeting //λΉμμ ν¬μΈν°, μμ λ°μ΄ν°ν char * const p = greeting //μμ ν¬μΈν°, λΉμμ λ°μ΄ν° constμ μν μμνλ₯Ό νλ¨νλ κΈ°μ€μ *μ μμ μλ λ€μ μλλ‘ λ°μ§λ€. const char * p = greeting char const * p = greeting //μ κ°λ€. //in STL interator const iterator a iterator const a //-> T * const const_iterator a //-> const T *
- μ΄μ¬ν μ λΆμ΄λ©΄ μμ€μ½λκ° κ²¬κ³ ν΄μ§λ€.
- const Functionμ΄λ μλλλ‘λ overloadingμ΄ λλ€.
- λΉνΈ μμ€ μμμ± - μ΄λ€ λ§΄λ² ν¨μκ° κ·Έ κ°μ²΄μ μ΄λ€ λ°μ΄ν° λ§΄λ²λ 건λλ¦¬μ§ μμμΌ νμ§λ§ κ·Έ λ§΄λ² ν¨μκ° constμμ μΈμ νλ κ°λ
.(C++μμλ )
- λΉνΈ μμ€ μμμ±μ νκ³ : const ν¨μμμ κ°μ²΄μ μ΄λ€ λ°μ΄ν° λ§΄λ²λ 건λλ¦¬μ§ μκ³ λ°μ΄ν° λ§΄λ²κ° κ°λ¦¬ν€λ λ°μ΄ν°λ₯Ό 건λ리λ κ²½μ°λ λ§μ μ μλ€.
- λ
Όλ¦¬ μμ€ μμμ±
- λΉμμ λ²μ κ³Ό μμ λ²μ - λΉμμ λ²μ μμ μμ λ²μ μ νΈμΆ;
const_cast : constλ₯Ό λΌμ΄λ΄λ κ²
static_cast : constλ₯Ό λΆμ΄λ κ² -> C styleμ (const type)variable κ³Ό κ°λ€.
3.9. λ€μμ£Ό μκ³ ? ¶
- ??
- μ΄ λ€μ΄λ°μ νμ νν°μ μ΅κ·Ό λλΌλ§ μ±ν₯μ΄ λ°μλ κ²μΌκ²μΌ... - κΉνμ§
- μ€μ€ μ μ μ¬λ―Έμμ΄μ§λ€
- νμμΌμ νκ² λ€κ³ ν μ¬λλ€μ΄ 보μ΄μ§ μλκ΅°μ...=γ
= -κΉνμ§
- λ§€μ° μ μνκ²λ λ΄κ° κ°μ§λ₯Ό λͺ» νλ....... νν μμμΌ....... - ν©ν
- μ΄λ²μ£ΌκΉμ§ μμμΌ μ λ
μ΄λκΉ μκ° λ°κΏμ μμλ―γ
γ
λλλ λ§ν΄ - μμ§ν
- μ΄λ²μ£ΌκΉμ§ μμμΌ μ λ
μ΄λκΉ μκ° λ°κΏμ μμλ―γ
γ
λλλ λ§ν΄ - μμ§ν
- λ€μμκ°λΆν΄ μ΄λ‘ λ³΄λ¨ μ€μ΅ μμ£Όλ‘ κ°λκ² μ’μ κ² κ°μμ. λ°±λ¬Έμ΄λΆμ¬μΌνκΈ°λ νκ³ μ°Έμ¬μκ°μ κ°μ λΉ λ₯΄κ² μ€μ΄λ λ°©λ²μ΄κ³ .. - μμ§ν
- 22μΌλΆν° νμμΌ μ€ν 3μμ
λλ€ - μ‘°κ΄ν¬
- κ΅¬κΈ νμμ μ λ§ μ’λ€μγ
γ
γ
γ
κ·Έλ λ€κ³ νν°κ° μ§μμ μ격μΌλ‘ κ°μν΄μλ μλλμ΅λλ€γ
γ
γ
γ
- κΉλ―Όμ¬
- νμμμΌλ‘ νλ κ°μ μ¬λ―Έμμμ΅λλ€. κ»κ»κ» - κΆμκΈ°
- λ©ν λ§ νμ λλ¬Έμ μ§λ κΈμμΌ μ°Έμ¬ λͺ»νλ€μ.. γ
γ
- κΉλ―Όμ¬
- http://wiki.zeropage.org/wiki.php/i++VS++i μ΄κ±° μ μ μκΈ°νλκ±°λ€ - μμ§ν