C++

표준 입출력 라이브러리

#include <iostream>

iostream 라이브러리는 c++ 표준 입출력 라이브러리이다. c언어의 stdio.h와 흡사하게 사용된다. c++에서는 형식 지정자(ex %d, %f)를 넣어주지 않아도 변수를 타입에 맞게 적절히 입출력을 해준다. c++ 기본 입출력 라이브러리에서는 >><< 연산자를 제공한다. 이때 입력을 받는 >> 연산자는 공백문자(space, Enter, Tab)을 기준으로 입력을 받는다.

#include <iostream>
#include <string>

int main(){
	std::string input;
	std::cin >> input;
	std::cout << input << std::endl;
	return 0;
}

cin

고수준 입력 방식을 사용하면 코드가 간단해지지만, 이에 의한 속도 저하 또한 클 수 있다. <cstdio>와의 동기화를 끄면 훨씬 빨라진다.

#include <iostream>
using namespace std;

int main(void){
    cin.sync_with_stdio(false);    
    return 0;
}

namespace

namespace는 특정 영역에 이름을 설정할 수 있도록 하는 문법이다. 서로 다른 개발자가 공동으로 프로젝트를 진행할 때 각자 개발한 모듈을 하나로 합칠 수 있게 해준다.

[namespace]::[변수 혹은 함수]

namespace라는 소속 공간에 따라 변수나 함수가 같은 이름임에도 다르게 구분이 될 수 있다.

#include <iostream>

namespace A{
    void function(){
        cout << "A namespace"<< endl;
    }
}
namespace B{
    void function(){
        cout << "B namespace"<< endl;
    }
}
int main(){
    A::function();
    B::function();
    return 0;
}

여기서 ::는 범위지정 연산자로 어떤 namespace에서 어떤 function을 사용할 것인지 명시할 수 있다.

using namespace <namespace>

기본적으로 표준 라이브러리를 using 키워드를 이용해 namespace로 선언해두고 앞에 명시하지 않고 사용할 수 있다.

using namespace std;

int main(){
	string input;
	cin >> input;
	cout << input << endl;
	return 0;
}

string 문자열 자료형

c++은 표준 문자열 자료형을 제공한다. 이는 string 헤더 파일에 정의되어 있다. 클래스로 구현되어있어 각 자료형별로 내장함수가 있으며, 이를 이용할 수 있다는 장점이 있다.

char arr[SIZE]; // c언어
string s; 			// cpp

위에서 말한 >> 연산자는 공백을 기준으로 입력받는데, 한 줄 전체를 입력받고 싶은 경우에는 getline()함수를 사용할 수 있다.

int main(){
	string input;
	getline(cin, input);
	cout << input << endl;
	return 0;
}

또한, c++의 string은 다른 자료형으로의 변환이 간편하다. to_string(), stoi()와 같이 정수를 문자열로, 문자열을 정수로 쉽게 변환할 수 있다.

 		int i = 123;
 		string s = to_string(i);
    cout << "정수 -> 문자열" << s << endl;

    s = "456";
    i = stoi(s);
    cout << "문자열 -> 정수" << i << endl;

동적할당도 c++에서 더 간단하게 할 수 있다.

#include <iostream>
#define SIZE 100

using namespace std;
int *arr;

int main(){
	arr = new int[SIZE]; // 동적할당
	for(int i=0; i < SIZE; i++){
		cout << arr[i] << ' ';
	}
	delete arr; // 할당 해제
	return 0;
}

new 키워드로 동적할당을 할 수 있으며, 할당 해제시에는 delete로 할 수 있다.

c언어와 비교

  • c++는 객체 지향 패러다임을 따르고 있는 언어, c언어는 절차적 프로그래밍 언어

  • 즉, c++은 객체 중심의 언어이고, c언어는 함수 기반의 언어이다.

  • c++은 c언어의 구조체(struct)대신에 class를 사용한다.

  • c++은 공식적으로 예외처리 기술을 지원한다.

Last updated