.c, .cpp, .h 외의 확장자들 : .cxx, .hpp C/C++

요약하자면, c가 아닌 c++ 스타일로 정의된 헤더파일은 그것이 c++ 스타일임을 명시해 주어야 할 필요가 있기 때문에 .hpp와 같이 다른 확장자를 사용함으로서 이를 알 수 있게 한다.

cxx와  cpp는 같다고 생각한다.

It is probably due to a project using libraries (in form of source code) that don't use the same naming convention the programmer(s) of the project.

There are at least four different extensions usable for C++ files:
  • .C
    Not very popular since it requires a case-sensitive file system (otherwise, it would clash with old .c file names), and even a few modern OS are not case-sensitive.
  • .c++
    Some OS or file systems don't support the + character in file names.
  • .cpp
    That's very portable across file systems.
    But, it might be less consistent than .cxx
  • .cxx
    Very portable across file systems (not more than .cpp)
    Using the name CXX for C++ is quite popular because CPP usually designates the C (and C++) pre-processor.
    For example, these environment variables/makefile macros
      Represents the flags passed to the pre-processor.
    • CFLAGS
      Flags passed to the C compiler.
      Flags passed to the C++ compiler.
      Flags passed to the linker.
    • CC
      The path to the C compiler.
    • CPP
      The path to the pre-processor.
    • CXX
      The path to the C++ compiler.
    • LD
      The path to the linker.

    That's why, with the above notations, it's very natural to give the .cxx extension to C++ files.

For headers, there are at least five extensions:
  • .h
    Traditional C header files.
    Since the compiler doesn't do anything based on this extension, it can be used for C++ header files too.
    Furthermore, there are a lot of header files that are designed to be included by both C and C++ translation units.
    In that case, it's natural to give them this extension.
  • .H, .hpp or .hxx
    That's very natural to give one of these extensions for C++ header files (being consistent with the name of C++ translation units).
    That's not a bad idea to use one of these name for pure C++ header files only (containing class definitions, or templates, or any other feature not supported by C).
  • No extension
    That's internally used by a number of C++ compilers for iostream, vector, algorithm and all others new-style C++ headers.

There are probably other (less popular) extensions for headers.
Perhaps .cpp and .i

arg min(x) and arg max(x) Mathematics

min(f(x))는 f(x)의 최소값
arg min(f(x))는 f(x)를 최소로 만드는 x값

max(f(x))는 f(x)의 최대값
arg max(f(x))는 f(x)를 최대로 만드는 x값

예를들어, f(x)=cos(x)일때 arg max(f(x))와 arg min(f(x))는 다음과 같다.

물론, max(f(x)) = 1, min(f(x)) = -1 이다.

Hadamard product(아다마르 곱) Mathematics

같은 차원의 두 행렬 A, B를 아다마르 곱 했을 때, 그 결과 C의 i, j의 원소는 A행렬의 i, j번째 원소와 B행렬의 i, j번째 원소의 곱과 같다. 즉, A와 B가 각각 3*2행렬이라면 두 행렬 A, B의 아다마르 곱은 다음과 같다.

array multiplication (*.)으로 계산한다.


Greedy algorithm(탐욕 알고리즘) Mathematics

'매 순간 최선의 선택을 하는 것이 최종적으로 최선의 방향으로 근접해 나가는 것이다.'라는 전제하에 문제에 접근

모든 경우의 수를 고려하지 않기 때문에 이번의 선택이 다음에 어떤 영향을 줄지는 알 수 없다.
즉, Local minimum 문제를 벗어날 수 없는 큰 단점이 있다.


Sparse Matrix(희소행렬) Mathematics

행렬의 원소들 중 다수가 0(data가 존재하지 않음)인 행렬

0이 아닌 원소의 개수가 상대적으로 적을 경우, 행렬 전체를 저장하는 것은 효율적이지 못하다.
따라서, Linked list를 이용하면 이를 절약할 수 있다.

Linked list

1 2 3 4 5 6