[C++] stream(istream, ostream, sstream)과 stream insertion/extraction 연산자 (>>, <<)
·
Programming Language(Sub)/C++
C++에서 istream, ostream, sstream는 모두 표준 라이브러리에서 제공하는 스트림 클래스입니다. 이 클래스들은 입출력 작업을 추상화하여 파일, 콘솔, 문자열 등을 손쉽게 다룰 수 있도록 도와줍니다. 각각에 대해 자세히 설명하겠습니다.1. istreamistream은 입력 스트림을 나타내는 클래스입니다. 이 클래스는 데이터 입력을 위한 다양한 메소드를 제공합니다. istream의 주요 역할은 데이터의 입력을 관리하는 것입니다.주요 기능연산자 오버로딩 (>>, stream insertion operator): 데이터를 입력받을 때 사용하는 연산자입니다.ex) cincin은 c++ 표준 라이브러리에서 제공하는 객체로, istream 클래스의 객체임int x;std::cin >> x; // 콘..
[C++] std::distance, std::advance
·
Programming Language(Sub)/C++
(알고리즘 코드를 보다가 GPT를 통해서 얻은 답변을 따로 정리해둔 게시글이에요) std::distance()와 std::advance() 함수는 C++ 표준 라이브러리에서 제공하는 반복자 관련 함수입니다. 이 두 함수는 반복자를 다루는 데 유용하게 사용될 수 있습니다.std::distance()std::distance(first, last) 함수는 두 개의 반복자 first와 last 사이의 거리를 계산하여 반환합니다. 이 함수는 다음과 같은 형태로 사용됩니다:template typename std::iterator_traits::difference_typedistance(InputIt first, InputIt last);first: 거리를 계산할 첫 번째 반복자last: 거리를 계산할 두 번째 반복..
[Modern C++] std::move, std::forward
·
Programming Language(Sub)/C++
추후 내용 보충. 예정 std::move와 std::forward는 모두 C++11 이후부터 도입된 유틸리티 함수들로, 둘 다 값의 전달 방식을 조절하는 데 사용됩니다. 그러나 각각의 역할과 사용하는 상황이 다르므로, 이 둘을 정확히 이해하는 것이 중요합니다.std::move역할: std::move는 주어진 인자를 "이동"할 수 있도록 하는 역할을 합니다. 이동(move)이란 객체의 자원(메모리 등)을 다른 객체로 옮기는 것을 말하며, 복사보다 효율적인 자원 관리를 가능하게 합니다.사용 방법: std::move는 주로 객체를 이동할 때 사용됩니다. 이 함수는 주어진 인자를 rvalue reference로 변환하여, 이동 연산자(move constructor 또는 move assignment operato..
[C++ STL] std::tuple
·
Programming Language(Sub)/C++
std::tuple이란?기존에 다른 데이터 타입의 값 2개를 저장하기 위해 pair를 사용했지만, first와 second 두 개의 요소만 관리할 수 있었다.C++11부터 STL에서 tuple을 제공하여 다수의 요소를 관리할 수 있는 tuple을 제공한다.에 정의되어 있다. 기본 사용법#include #include int main() { // 다양한 타입의 요소들을 포함하는 튜플 생성 std::tuple myTuple(1, 3.14, "Hello"); // 튜플의 요소에 접근 std::cout (myTuple) (myTuple) (myTuple)  별 특이한 점은 없지만, std::get을 사용할 수 있다. std::getstd::get 템플릿 함수를 이용해서 튜플의 요소에 접근할..
[C++ STL] std::string
·
Programming Language(Sub)/C++
std::string이란?STL에서 제공하는 문자열 처리 클래스동적 길이 문자열을 다루기 쉽게 만들어준다.에 정의되어 있다. 내부 구현?문자열의 크기에 따라 동적으로 할당하여 문자열 데이터를 저장한다짧은 문자열은 내부 버퍼에 따로 저장하여 동적 할당을 하지 않는다복사 및 연산 과정에서 기본적으로 깊은 복사를 사용한다. 포인터나 참조가 기반으로 관리되지 않는다초기화기본 생성자 : 빈 문자열 생성std::string s; C-스타일 문자열로부터 생성std::string s1("Hello");std::string s2 = "Hello";std::string s3 = ""; 반복자로부터 생성std::string s(iter1, iter2); 특정 문자 n개로 초기화std::string s(5, 's');// "..
[C++ STL] std::pair
·
Programming Language(Sub)/C++
std::pair란?두 개의 이질적인 데이터 타입의 값을 하나로 묶어서 저장하는데 사용되는 템플릿 클래스두 개의 값을 리턴해야 해야 하거나, 두 개의 값을 key와 value로 사용하는데 유용하다에 정의되어 있다. std::pair의 구현 방식실제 구현 코드는 아니지만, 이러한 방식으로 구현되어 있다template struct pair { T1 first; T2 second; // 기본 생성자 pair() : first(T1()), second(T2()) {} // 사용자 정의 생성자 pair(const T1& a, const T2& b) : first(a), second(b) {} // 복사 생성자 template pair(const pair& p) :..
[C++] 클래스와 함수의 friend 선언
·
Programming Language(Sub)/C++
friend 선언(클래스, 함수)friend는 친구라는 의미를 가지고 있다.클래스의 friend 선언클래스를 friend로 선언한다는 것은 어떤 의미일까? 예를 들어 클래스 A와 B가 있다고 해보자. 이 때 클래스 A가 "클래스 B는 내 믿을만한 친구야."라고 컴파일러에게 알려준다. 그러면 클래스 B에서 클래스 A의 모든 멤버(private까지)를 접근할 수 있게 된다A 클래스가 B 클래스를 friend 클래스로 선언하면, B 클래스는 A 클래스의 private 멤버까지 직접 접근이 가능하다.a.GetX()가 아니라 a.x 이런식으로 직접 접근이 가능해진다반대로 A 클래스가 B 클래스의 private멤버까지 직접 접근을 하기 위해서는 B 클래스에서 A 클래스를 frined 클래스로 선언해줘야 한다즉, 클..
[C++] 스마트 포인터
·
Programming Language(Sub)/C++
스마트 포인터스마트 포인터를 이용하면 동적할당된 메모리를 알아서 지워준다3가지 종류 존재unique_ptrshared_ptrweak_ptrunique_ptrint *a = new int(5);를 스마트 포인터를 이용하여 동적할당해보자#include #include using namespace std;int main() { // int *a = new int(5);를 스마트 포인터를 이용하여 생성해보자 // 다음은 불가능 // unique_ptr a = new int(5); unique_ptr a(new int(5));}unique_ptr a = new int(5);은 불가능함이 경우 변환 생성자가 호출되는데, 스마트 포인터의 경우 묵시적 형변환이 불가능하기 때문따라서 생성자를..
[Modern C++] 함수 객체와 람다식
·
Programming Language(Sub)/C++
함수 객체와 람다식함수 객체 : 함수처럼 작동하는 객체 (function object/functor)예제 코드를 보기 전에 알아야 하는 내용이 있다.bool f(int x) { //}int main() { f(1);}f(1)에서의 소괄호 ()는 연산자임을 기억하자.(물론 f는 객체가 아니긴 하지만) f.operator()(1); 이런 식으로 연산자를 호출해서 작동을 한다.그래서 소괄호 연산자에 대해서도 오버로딩을 해줄 수가 있다.#include using namespace std;class Equals { public: Equals(int value) : value(value) {} bool operator()(int x) const { return x == ..
[C/C++] 함수 포인터
·
Programming Language(Sub)/C++
함수 포인터모든 명령어들은 전부 0과 1로 메모리에 저장이 되기 때문에, 메모리 저장 공간의 주소를 가지고 있다함수 포인터는 함수에 대한 포인터를 가지고 있다.bool compare(int a, int b) { return a == b;}int main() { bool (*fp)(int, int); int *a;}int *a를 a를 역참조하면 int형이 나온다라고 해석할 수 있다.이런 것처럼 fp를 역참조를 하면 bool을 리턴하고 int 2개를 매개변수로 받는 함수다 라고 해석할 수 있다.fp는 int 2개를 받고 bool을 반환하는 함수를 가리키는 포인터이다.bool compare(int a, int b) { return a == b;}int main() { bool (*f..