Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

공hannah부

C++기초, C++ STL 본문

공부/알고리즘

C++기초, C++ STL

Hannah0226 2023. 7. 25. 18:52

Basic C++

입출력 스타일

  • C 스타일과 C++ 스타일을 모두 지원한다.
  • C 스타일
int a;
scanf("%d", &a);
printf("%d", a);

 

  • C++ 스타일
int a;
cin >> a;
cout << a << "hello";

 

문자열

  • C 스타일: 끝에 NULL 존재
char s[100] = "I Love You";

 

  • C++ 스타일: 끝에 NULL 없음
string s = "I love you";

string a = "I ";
string b = "love you ";

cout << a + b; //I love you
cout << b + a; //love you I

cout << a.size() << ' ' << b.size(); //2 8

if (a == b) cout << "same";
else cout << "different"; //different

cout << b[2]; // v

C++ STL

  • pair: 두 데이터를 하나로 묶어줌
    • pair<int, int>를 하나의 자료형이라 여기면 된다
    • p[i].first: 앞부분, p[i].second: 뒷부분
    • sort 함수: p[i].first를 기준으로 오름차순, 같다면 p[i].second를 기준으로 오름차순 정렬
int main() {
	pair<int, int> p[10];
	for (int i = 0; i < 10; i++)
		p[i] = { (i - 3) * (i - 7), i };

	sort(p, p + 10); //p번째부터 p+10번째까지 오름차순으로 정렬

	for (int i = 0; i < 10; i++)
		cout << p[i].first << ' ' << p[i].second << "\n";
}

 

  • tuple: n개의 데이터를 하나로 묶어줌 (pair의 확장 버전)
    • pair의 first, second = tuple에서는 get<0>(변수명), get<1>(변수명), ...
    • tie: pair나 tuple로 묶인 원소들을 한번에 가져올 수 있다
int main() {
	tuple<int, char, string> t(1, 'I', "love you");
	int a; char b; string c;
	tie(a, b, c) = t;
	cout << a << ' ' << b << ' ' << c; //1 I love you
	cout << get<0>(t) << ' ' << get<1>(t) << ' ' << get<2>(t);//1 I love you
}

 

  • vector: 알아서 크기를 조절해주는 배열 (array와 매우 비슷하다)
int main() {
	vector<int> v;
	vector<int> v2(10); //=int v2[10];
	vector<int> v3(10, 0); //10개의 모든 공간 0으로 초기화
	vector<vector<int>> v4; //2차원 배열
	vector<vector<int>> v5(10, vector<int>(10, 0)); //10*10배열 0으로 초기화
}
int main() {
	vector<int> v = { 1,2,3 };
	v.pop_back(); //뒷 값 빼기 {1,2}
	v.push_back(4); //뒤에 4 넣기 {1,2,4}
	cout << v.front(); //1
	cout << v.back(); //4
	v.clear();
	cout << v.size(); //0
}

더 알면 좋은 것들

  • reference (참조)
    • 개체의 주소를 보유
    • 개체의 복사본을 만들지 않으므로 더 좋은 성능을 보임
    • call by value vs call by reference
      1. call by value: 실제 값 복사해서 전달 → 원본 바뀌지 않음
      2. call by reference: 실제 값의 주소를 전달 → 원본 바뀜
  • auto: 변수의 형식을 추론한다.
int main() {
	vector<int> v = { 1,2,3,4,5 };
	for (auto i = v.begin(); i != v.end(); i++) //i int로 추론
		cout << *i << ' ';
}

 

  • range-based for loop (범위 기반 for 문)
    • for(for-range-declaration : expression) {statement}
    • expression에 있는 각각의 원소에 대해 statement를 반복한다.
    • index 정보가 없다
int main() {
	vector<int> v = { 1,2,3,4,5 };
	for (auto x : v) cout << x << ' '; //1 2 3 4 5
}

 

  • #include<bits/stdc++.h> : 여러개의 헤더 파일들을 한 곳에 모아 둔 헤더 파일
    • BOJ, Codeforces, ArtCoder 등에서 모두 잘 작동됨
    • 로컬환경에서는 대부분 해당 헤더 파일이 없으니 따로 설정해 주어야 함