0. Intro
<코딩테스트 합격자 되기> 스터디를 진행하며 C++을 연습할 계획입니다
1. using namespace std?
C++에서 표준 라이브러리 구성 요소를 현재 파일(scope)로 가져오는 지시문
c++ 코드를 볼 때 std::
구문이 항상 존재했었다
cout
과 같은 코드를 사용할 때에도 using namespace std
를 사용하지 않으면?
std::cout
과 같은 형태로 작성해야 한다
2. 항상 써도 될까?
using namespace std
는 편리할 수 있지만, 개발에서는 사용하지 않는 것이 좋다
이름 충돌을 방지하는 기능인데
만일 내가 만든 custom_namespace가 있을 때, 여기에도 cout 함수가 있다면?
#include <iostream>
#include <string>
namespace my_namespace {
void cout(const std::string& message) {
std::cout << "my_namespace::cout: " << message << std::endl;
}
}
using namespace std;
int main() {
std::cout << "Hello, World!";
return 0;
}
Hello, World를 출력하지 못하고 오류가 나온다

명시적으로 달아준다면?

빌드에 성공하는 모습을 볼 수 있다
3. 입력 받기
https://www.acmicpc.net/problem/11945
백준 뜨거운 붕어빵 문제를 통해 처음 C++ 입력 연습을 진행했다
5 7
0010000
0111010
1111111
0111010
0010000
위의 입력을 반대로 출력하는 문제였다
C++에서 입력을 받을 때에는 우선 #include <iostream>
헤더를 입력해서
std::cin
std::cout
등 입출력을 가능하게 만들어야 한다
조금 특이한 점은
int N, M;
cin >> N >> M;
이런 형태로 처음에 선언을 해주고, 연속된 입력을 받을 수 있다는 점?
이후는 java와 유사하다
vector<vector<int>> matrix;
string line;
for (int i = 0; i < N; ++i) {
cin >> line;
vector<int> temp;
for (int j = 0; j < M; ++j) {
temp.push_back(line[j] - '0');
}
matrix.push_back(temp);
}
1. string line
을 선언한 뒤, cin >> line
을 통해 한 줄씩 입력을 총 N-1
회 받는다
2. 이후 임시 vector
를 선언하고, push_back
으로 temp
뒤에 line의 인덱스 값을 하나씩 추가한다
3. 한 줄 입력이 끝나면 해당 temp
vector를 matrix
뒤에 차례로 입력한다
입력은 이렇게 끝났다
남은 것은 출력
std::cin
작성 후 >>
라는 stream 연산자
또는 추출 연산자
를 통해 입력을 받는다
std::cout
의 뒤에는 <<
연산이 붙는데, 이는 출력이라고 이해하면 쉬울 것 같다
4. 뒤집어진 내용을 출력하면 된다
전체 코드
#include <iostream>
#include <vector>
#include <string>
using std::vector;
using std::string;
using std::cin;
using std::cout;
int main()
{
int N, M;
cin >> N >> M;
vector<std::vector<int>> matrix;
string line;
for (int i = 0; i < N; ++i) {
cin >> line;
vector<int> temp;
for (int j = 0; j < M; ++j) {
temp.push_back(line[j] - '0');
}
matrix.push_back(temp);
}
for (int i = 0; i < matrix.size(); ++i) {
for (int j = matrix[i].size() - 1; j >= 0; --j) {
cout << matrix[i][j];
}
cout << "\n";
}
return 0;
}
using namespace std
의 사용을 지양하고, 명시적으로 사용할 함수를 가져오는 코드로 변경했다
물론 계속 std::
를 사용하는 것은 가시성도 안좋으니 using
구문에 추가해서 실제 코드는 간소화해서 사용해보려 한다
4. 마무리
앞으로 연습할 때 귀찮아도 using namespace std
를 사용하지 않고, 직접 치는 연습을 해야겠다
Java만 사용해서 C++로 개발할 일이 있을까? 싶기는 하지만, 혹시 모르니까
추가로 return 0;
을 꼭 사용해야 하는지도 궁금했는데,
이 또한 명시적으로 함수가 성공했음을 반환해라 라는 의미라고 한다
main
함수에는 return
문이 없는 경우 자동으로 return 0;
을 추가한다
C++을 학습할 때 명시성을 생각하며 학습해야겠다
'알고리즘 > 개념' 카테고리의 다른 글
[C++] 문자열 치환하기 (0) | 2024.07.12 |
---|---|
String to Char & Char to String (3) | 2023.11.29 |