코딩 모닥불
  • 메뉴 닫기
  • 글작성
  • 방명록
  • 환경설정
    • 분류 전체보기
      • C++
      • 표준 라이브러리
      • 백준(BOJ)
  • 홈
  • 태그
  • 방명록
C++

[C++] 이름 충돌을 해결하기 위한 namespace

namespacenamespace는, 단어에서 알 수 있듯이, 이름( identifier )이 유일하게 정의된 공간을 말합니다.그리고, 이러한 공간을 만드는 이유는, 생각 외로 자주 발생하는 이름의 중복을 막기 위해서입니다. C++에서는 아래와 같이 이름을 가진 두 함수가 같은 파일에 정의되어 있으면 컴파일러 오류가 발생합니다.// main.cpp ----------------------------------------int Compute(int a, int b){ return a + b;}int Compute(int a, int b){ return a - b;}그리고, 이 같은 이름의 두 함수가 각각 다른 파일에 정의되어 있다면 링크 오류가 발생합니다.// myMath1.cpp -------..

2025. 3. 19.
C++

[C++] 모든 타입의 객체를 지시할 수 있는 void 포인터

void 포인터( pointer )void 포인터는 데이터 타입에 구애받지 않는, 메모리를 가리키는 포인터입니다. 일반적인 포인터의 선언은 다음과 같습니다.데이터_타입* 포인터명void 포인터는 위의 "데이터 타입"에 void가 쓰여서, 정해진 데이터 타입이 없다는 것을 나타냅니다.char c;int* pInt = &c; // compile error !!void* pVoid = &c; // ok위에서 char 포인터를 int 포인터에 대입하면 데이터 타입 불일치로 컴파일이 되지 않습니다. 그러나, void 포인터는 메모리 주소이기만 하면 전혀 데이터 타입을 고려하지 않습니다. char*, 배열을 가리키는 포인터, 함수 포인터( function pointer ) 등등 주소를 가리키는 것은 다 담을 수 ..

2025. 3. 18.
표준 라이브러리

[C++] 호출 가능한 객체를 저장하는 std::function

std::function 객체C++ 표준 라이브러리에서 제공하는 std::function 객체는 C++의 호출 가능한 모든 객체들( callable )을 저장하고 실행하는 객체입니다. 그리고, 여기서 말하는 callable은 () 연산자를 호출할 수 있는 객체를 말합니다. 예를 들어, 함수( function )는 함수명을 피연산자로 하는 () 연산자를 사용해서 호출할 수 있습니다. 그래서, callable이라고 할 수 있습니다.int normal_func( int a, int b){ // 일반 함수 return a + b;}int main(){ int sum = normal_func( 3, 5 ); // callable} ● operator()를 구현한 함수 객체( function objec..

2025. 3. 17.
C++

[C++] 간단한 함수 객체를 정의하기 위한 람다 표현식( lamda expression )

람다 표현식( lamda expression )줄여서 람다( lamda )라고도 하는 람다 표현식은 익명의 함수 객체를 정의하고 사용하기 위한 표기법입니다. 이 표현식은 간단한 기능을 구현하는데, 너무 많은 손이 가는 것을 막고자 하는 목적으로 C++11부터 도입되었습니다. 다음의 예제는 std::vector의 원소들을 특정 값에 더하는 간단한 코드입니다.#include #include #include using namespace std;int sum = 0; // 전역 변수void add_func(int val){ sum += val;}int main(){ vector vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for_each( vec.begin(), vec.en..

2025. 3. 13.
C++

[C++] 함수 객체( function object, functor ) : operator()를 구현한 타입

함수 객체( function object )함수 객체( function object )는 operator() 함수를 구현한 타입( type )을 말합니다. C++ 표준 라이브러리에서는, 펑터( functor )라고도 불리는, 이 타입을 주로 컨테이너나 알고리즘의 정렬 기준이 필요할 때 사용합니다. 다음 예제에서는 이러한 함수 객체를 사용하는 법을 볼 수 있습니다.class FuncObj{ public: int operator()(int a, int b){ // 이 연산자를 구현한 타입이 함수 객체 return a + b; }};int Func(int a, int b){ // 일반 함수 return a + b;}int main(){ FuncObj func; // 함수 ..

2025. 3. 13.
표준 라이브러리

[C++] 주어진 원소들에 함수를 적용하는 std::for_each

std::for_each 사용법std::for_each는 주어진 구간 내에 있는 원소들에 대하여 지정한 함수 객체를 적용하는 함수입니다. 이 함수를 사용하려면 다음의 헤더를 포함해야 합니다.#include 함수의 정의는 다음과 같습니다.templateFunction for_each( InputIterator first, InputIterator last, Function func);여기서 func는 매개 변수가 하나인 함수 객체입니다. 그리고, 이 함수는 종료 시, func의 복사복을 반환합니다. ( 이것은 아래에서 다시 설명합니다. ) 다음은 람다( lamda ) 함수를 std::for_each 함수에 지정하여, 원소들의 총합을 구하는 예문입니다.int main(){ vector ..

2025. 3. 12.
C++

[C++] 객체의 모든 원소를 순환하는 범위 기반 for 구문

범위 기반 for ( range-based for )범위 기반 for 루프는, C++11부터 도입된, 배열이나 컨테이너 같이 데이터의 연속을 나타내는 객체의 모든 멤버를 순환하는 구문입니다. 선언 방식은 다음과 같습니다.for ( 데이터_타입 변수명 : 배열 or 컨테이너 등 순환가능한 객체 ){}범위 기반 for 구문의 대상은 배열이나 컨테이너뿐 아니라, 데이터가 연속되어 있는 순환가능한 객체라면 대상이 될 수 있습니다. 예를 들어, std::string 문자열 안에 있는 모든 문자를 출력하는데도 이 구문을 사용할 수 있습니다. 그리고, 위에서 말하는 "데이터_타입"은 이러한 순환가능한 객체가 가진 멤버의 데이터 타입을 말합니다. 이 구문의 장점은 기존의 for 구문보다 알아보기 쉽고 짧은 코드를 만들..

2025. 3. 11.
표준 라이브러리

[C++] 입력된 원소들을 차례로 변환하는 std::transform

std::transform 기본 사용법std::transform은 지정된 함수 객체를 입력된 범위의 모든 원소들에게 적용하고, 그 결과를 대상 범위에 출력하는 함수입니다. 이 함수를 사용하려면 먼저 다음 헤더를 포함해야 합니다.#include 이 함수의 정의는 다음과 같습니다.templateOutputIterator transform( InputIterator first1, InputIterator last1, OutputIterator result, UnaryFunction func );여기서, func는 입력된 범위의 원소를 인자로 전달로 받는 함수 객체입니다. 이 func 함수 객체는, UnaryFunction 이름이 말하듯이, 오직 1개의 매개 변수만을 가져야 합니다. 그리고..

2025. 3. 11.
표준 라이브러리

[C++] 배열, 컨테이너, 사용자 정의 데이터를 정렬하기 위한 std::sort

std::sort의 정의와 기초 사용법std::sort는 지정된 범위에 있는 데이터 요소를 기본적인 오름차순 또는 지정한 정렬 기준에 따라 정렬하는 함수입니다.이 함수를 사용하기 위해서는 우선 다음과 같은 헤더파일을 포함해야 합니다.#include 이 함수의 정의는 다음과 같습니다.templatevoid sort( RandomAccessIterator first, RandomAccessIterator last);위의 첫 번째 인자 first는 정렬할 범위의 첫 번째 요소의 주소를 지정하는 임의 액세스 Iterator입니다. 두 번째 인자 last는 정렬할 범위의 마지막 요소 다음 위치의 주소를 지정하는 임의 액세스 Iterator입니다. 정의에 사용된 단어를 보면 복잡한 것 같지만, 실제로 사..

2025. 3. 10.
C++

[C++] 단점을 보완한 범위 있는( scoped ) enum

범위 없는( unscoped ) enumC++에서 보통의 식별자들의 경우, 중괄호 블록을 벗어나게 되면, 효력을 잃게 마련입니다.int main(){ { int val = 0; } val += 10; // error ! 변수의 범위를 벗어났음} 그렇지만, 아래의 enum 타입의 식별자 같은 경우, 이러한 제약에 영향을 받지 않습니다.int main(){ enum Color{ white, black, red }; auto white = false; // error ! enum Color2{ black, yellow, blue }; // error !! black 식별자 중복}▼출력error: 'auto white' redeclared as differen..

2025. 3. 9.
  • «
  • 1
  • ···
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • »

전체 카테고리

  • 분류 전체보기
    • C++
    • 표준 라이브러리
    • 백준(BOJ)

블로그 인기글

태그

  • #전처리기
  • #std::stack
  • #const
  • #decltype
  • #constexpr
  • #포인터
  • #Enum
  • #상수 표현식
  • #std::string_view
  • #이진 탐색
  • #전방 선언
  • #std::sort
  • #소멸자
  • #inline
  • #namespace
  • #함수 객체
  • #std::unique_ptr
  • #예외 처리
  • #깊이 우선 탐색
  • #헤더 가드
  • #auto
  • #using
  • #초기화
  • #std::vector
  • #static_cast
  • #Lamda
  • #범위 기반 for
  • #복사 생성자
  • #std::queue
  • #동적 계획법
MORE
애드센스 광고 영역
Powered by Privatenote Copyright © 코딩 모닥불 All rights reserved. TistoryWhaleSkin3.4

티스토리툴바